Как из объекта метаданных объект. Работа с метаданными
Метаданные 1С – это список справочников, документов, их реквизитов и прочего, составляющего конфигурацию. Список метаданных 1С правится программистов в конфигураторе в окне конфигурации.
Из программы на языке 1С доступен список метаданных 1С и их свойства.
Это удобно, когда требуется получить список документов в конфигурации или отработать все реквизиты документа.
Рассмотрим, как работать с метаданными 1С конфигурации из языка 1С.
Метаданные 1С конфигурации
Глобальная переменная Метаданные дает доступ к метаданным 1С всей конфигурации (т.е. к «корню» конфигурации). Далее через точку можно обращаться к «коллекциям» — документы, справочники и т.п., чтобы выйти на конкретный справочник или документ, у которых соответственно есть «коллекции» реквизиты, табличные части и т.п. – все, как в конфигураторе, в дереве конфигурации.
Пример – создадим список всех документов конфигурации для того, чтобы пользователь мог выбрать нужный документ из списка:
спДокументовКонфигурации = Новый СписокЗначений(); //сюда будем сохранять список
//Метаданные - глобальная переменная, которая дает доступ ко всем метаданным 1С конфигурации
//Метаданные.Документы - коллекция документов конфигурации
Для каждого Документ из Метаданные.Документы Цикл
//Документ - это метаданные 1С документа (каждого, так как мы обходим их в цикле)
//.Имя - наименование документа так, как оно задано в конфигурации
//.Синоним - "человеческое" наименование документа, которое отображается пользователю
//список значений может хранить значение (имя документа) и "представление для пользователя" (как раз - синоним документа)
спДокументовКонфигурации.Добавить(Документ.Имя, Документ.Синоним);
КонецЦикла;
//даем возможность пользователю выбрать из списка нужный документ
элДокумент = спДокументовКонфигурации.ВыбратьЭлемент();
//если пользователь нажал "Отмена", то результатом выбора будет значение НЕОПРЕДЕЛЕНО, иначе результатом будет - выбранный элемент
Если элДокумент Неопределено Тогда
//в.Значение списка значений мы записывали имя документа "как в конфигурации"
//создадим новый документ с таким именем, напомним - к документам можно обращаться Документы.ИмяДокумента или Документы[ИмяДокумента]
обДокумент = Документы[элДокумент.Значение].СоздатьДокумент();
//ДокументОбъект.ПолучитьФорму() - возвращает форму с указанным именем, а если имя не указано - то форму "по-умолчанию"
обДокумент.ПолучитьФорму().Открыть();
КонецЕсли;
Пример – для общего журнала документов (отображающего все виды документов) создадим запрос, который вернет список всех документов:
Метаданные 1С объекта
Большинство объектов 1С, сохраняемых в базе данных (справочники, документы и т.д.) представлены ссылками и объектами (подробнее см. «Ссылки и объекты»).
У ссылок и объектов есть метод.Метаданные(), который позволяет выйти на метаданные 1С этого объекта.
Пример – проверка на наличие реквизитов с типом «Справочник.Организация» в документе и обнуление значения этих реквизитов:
//ДокументОбъект - документ, полученный на изменение или создание
//аналогичным образом можно работать со ссылками, например: ДокументСсылка = Документ.ИмяДокумента.ПустаяСсылка().Метаданные()
ДокументОбъект = Документы.ПоступлениеТоваров.СоздатьДокумент();
//цикл по реквизитам
Для каждого Реквизит из ДокументОбъект.Метаданные().Реквизиты Цикл
//у каждого реквизита может быть как один, так и несколько типов, подробнее см. "ОписаниеТипов"
//проверяем по каждому типу - тот ли это нужный нам?
//обнуляем реквизит с этим именем в документе
//для "обнуления" можно приравнивать его к Неопределено,
//по факту значение будет установлено не Неопределено, а "пустое значение" типа реквизита
//Неопределено только если у реквизита несколько типов
ДокументОбъект[Реквизит.Имя] = Неопределено;
КонецЕсли;
КонецЦикла;
КонецЦикла;
//цикл по табличным частям
Для каждого ТабЧасть из ДокументОбъект.Метаданные().ТабличныеЧасти Цикл
//в табличной части тоже реквизиты (колонки таб.части)
Для каждого Реквизит из ТабЧасть.Реквизиты Цикл
//здесь аналогично
мТипов = Реквизит.Тип.Типы();
Для каждого Тип из мТипов Цикл
Если Тип = Тип("СправочникСсылка.Организации") Тогда
//так как это таб.часть, то мы должны пройтись по всем строкам этой тач. части
Для каждого Строка из ДокументОбъект[ТабЧасть.Имя] Цикл
Строка[Реквизит.Имя] = Неопределено;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Существует множество баз данных. Чтобы понять, что они собой представляют, необходимо рассматривать их содержимое. Но есть одна маленькая полезная деталь - метаданные. Это то, что обобщает всю имеющуюся информацию. Для чего они были разработаны и зачем используются?
Что такое метаданные?
Следует отметить, что единой формулировки данного понятия не существует. Итак, метаданные - это общее название информации о
В основном используется четыре обозначения данного термина:
- Могут подразумевать субканальную информацию про используемые данные.
- Так называют характеристики, описывающие сущность. Они необходимы, чтобы искать, идентифицировать, оценивать и управлять значениями в БД. Ещё таким образом называют важный набор определённого количества структурированных описаний, предоставленных в допустимой форме и доступных в явном виде, благодаря чему можно найти необходимый объект. Подобная формулировка применяется в случаях, когда необходимо искать сущности, ресурсы и объекты.
- Данные из общей формальной системы, которые описывают свойства конкретного хранилища информации.
- Информация про характеристики веб-страницы (когда была создана, кто её автор).
Различие между данными и метаданными
Как их отличают? Дело в том, что провести однозначное разделение обычно невозможно. Почему? Давайте рассмотрим более детально на примере:
- Что-то может выступать в обеих ролях. Например, заголовок статьи может рассматриваться и как элемент метаданных, и в качестве информации, что передаётся читателю.
- Возможность меняться местами. Допустим, кто-то написал стихотворное произведение. Оно представляет собой данные. Композитор, опираясь на слова, создал музыкальную композицию и прикрепил данный текст. В таком случае он превращается в метаданные. Всё зависит от использования. Вообще, подобные случаи возможны из-за восприятия определённой точки зрения на основании своих суждений (тут играет роль пространство имён и система отсчёта).
- Возможность создания мета-…-метаданных ориентируясь на аксиому выбора. Это вытекает из того, что почти на любую информацию может быть создана своя система характеристик.
Метаданные файлов в компьютерах
Своё применение они нашли и в автоматизированных рабочих потоках. Если какая-то программа умеет работать с содержимым и то они могут быть преобразованы в другой тип информации, что позволяет освобождать пользователей от множества неудобных и рутинных действий.
Примером могут служить разработки, которые позволяют просматривать графические изображения с разными расширениями. Также можно вспомнить и о различных записях звука, фильмов и многих других вещах.
Метаданные в мировой сети
В интернете с их помощью осуществляется поиск необходимой полезной информации среди огромных массивов данных. С этой точки зрения, метаданные, которые создаются вручную, представляют большую ценность ввиду своей осмысленности. В качестве подобного типа информации могут выступать ключевые слова, теги и ряд других элементов. Метаданные - это то, что кратко рассказывает о сайте. При проведении анализа поисковыми системами нескольких сайтов, если они выявят на них одинаковые тематические слова, то их взаимное указание друг на друга будет иметь большее значение, чем с обычных сайтов.
Классификация метаданных
Как их различают? В основном классификация проводится по одному из двух принципов:
- Содержание. Метаданные используются, чтобы описывать файл, ресурс или его содержимое (к примеру, заголовок - «как готовить картошку»).
- По принадлежности. Метаданные могу использовать, чтобы информировать о чем-то целом или его составляющей. Так, название фильма относится ко всему нему, а описание эпизода информирует только об определенной части.
Если метаданные - это совокупность зависимостей от возможностей логического вывода, то в таком случае они делятся на 3 вида:
- «Сырые» данные. Основа информационного обеспечения.
- Метаданные, описывающие содержимое. Они, в свою очередь, тоже используются.
- Метаданные, с помощью которых можно сделать логический вывод.
Такие типы метаданных существуют.
Три наиболее востребованных класса
Предлагаем ознакомиться с тремя классами, которые сейчас широко применяются:
- Внутренние метаданные. Это информация, которая описывает составные части вещей, их структуру и что она собой представляет. В качестве примера можно привести размер и формат файла.
- Административные метаданные. Требуются для процессов обработки информации, а также для назначения вещи. Например, кто автор, редактор, когда был создан файл.
- Описательные метаданные. Используются, чтобы охарактеризовать природу файла и его признаки (к какой категории относится, с чем ещё связан).
Формат метаданных
Так называют стандарт, который используется, чтобы проводить формальное описание какой-то категории ресурсов (сущностей, объектов и тому подобного).
Обычно в нём есть определённый набор, который характеризует рассматриваемый объект. Для этого используются атрибуты, свойства, элементы метаданных.
Классифицируются по охвату и подробностям описываемых ресурсов.
Возможные проблемы
Когда может возникать ошибка метаданных? Отсутствие необходимой информации или ограничение доступа - вот основные причины возникающих проблем.
Также ошибка загрузки метаданных появляется в тех случаях, когда файл есть, но он повреждён. Основных причин такого состояния насчитывают три: износ техники, вредоносное влияние отдельных программ (как правило, компьютерных вирусов) и неправильное завершение работы с документом, по причине чего данные сохранились некорректно.
Соответственно, значение метаданных в классификации и систематизировании сетевой информации трудно переоценить. Поэтому желающим оптимизировать собственный сайт просто необходимы знания о них.
Что такое метаданные
Метаданные представляют собой структуру базы данных 1С:Предприятия. То есть это структура в которой описываются справочники, документы, регистры, перечисления и т.д., а также подчиненные им элементы: табличные части, реквизиты, измерения ресурсы и прочее. Визуально мы можем наблюдать эту структуру в конфигураторе, когда открываем дерево конфигурации.
Редактирование метаданных возможно только в режиме конфигуратора, но в языке 1С существуют методы и функции, которые осуществляют программный доступ к метаданным в режиме чтения.
Зачем нужна работа с метаданными
Бывают ситуации когда надо обработать по одному правилу все схожие между собой объекты. Допустим нам надо написать обработку, которая будет производить некие действия со всеми справочниками у которых есть реквизит Товар . Без использования метаданных надо будет проанализировать вручную всю ветку со справочниками в дереве конфигурации и для каждого справочника написать отдельный код. А с использованием метаданных мы можем программно обойти все справочники, а затем для каждого справочника можем проанализировать все его реквизиты. И в случае если искомый реквизит найден обработать все элементы справочника. Этот подход значительно уменьшит количество кода и предварительной ручной работы. Опять же если в конфигурацию будет добавлен новый справочник, в первом случае (без использования метаданных) необходимо будет дорабатывать обработку. Если же были использованы метаданные, никакой доработки не потребуется.
Также метаданные можно использовать в случае работы с реквизитами составного типа. Когда в зависимости от метаданных реквизита может различаться алгоритм работы программы.
Примеры
Обход метаданных в цикле
В качестве первого примера рассмотрим обход в цикле всех справочников и для каждого справочника также в цикле обход всех его реквизитов. Доступ к метаданным осуществляется с использованием свойства глобального контекста Метаданные . Вот код который выполняет данную задачу
Для каждого МетаданныеСправочника Из Метаданные. Справочники Цикл Сообщить(МетаданныеСправочника. Имя) ; Сообщить(МетаданныеСправочника. Синоним) ; Для каждого РеквизитСправочника Из МетаданныеСправочника. Реквизиты Цикл Сообщить(РеквизитСправочника. Имя) ; Сообщить(РеквизитСправочника. Синоним) ; КонецЦикла ; КонецЦикла ;Получение метаданных по ссылке объекта
Зачастую возникает ситуация когда надо получить метаданные по ссылке какого-нибудь объекта. Это может быть элемент справочника, документ и т.д. И здесь нам поможет метод НайтиПоТипу() . Этот метод позволяет получить метаданные по типу объекта. Соответственно если у нас есть ссылка нам надо сначала узнать ее тип. Сделать это поможет функция ТипЗнч() . В качестве примера возьмем справочник Пользователи (т.к. он есть наверное во всех конфигурациях). Выберем из него первый попавшийся элемент и получим по нему метаданные.
Запрос = Новый Запрос; Запрос. Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Пользователи.Ссылка |ИЗ | Справочник.Пользователи КАК Пользователи" ; Результат = Запрос. Выполнить () ; Выборка = Результат. Выбрать() ; Пока Выборка. Следующий() Цикл МетаданныеОбъекта = Метаданные. НайтиПоТипу(ТипЗнч(Выборка. Ссылка) ) ; Сообщить(МетаданныеОбъекта. Имя) ; Сообщить(МетаданныеОбъекта. Синоним) ; КонецЦикла ;
Получение метаданных по полному имени
Cуществует еще один метод, который позволяет получить метаданные по полному имени объекта. Речь идет о методе НайтиПоПолномуИмени() . Если взять тот же справочник Пользователи , то его полное имя выглядить как Справочник.Пользователи . Соответственно код для получения метаданных справочника Пользователи по полному имени выглядит вот так
МетаданныеПользователи = Метаданные. НайтиПоПолномуИмени("Справочник.Пользователи" ) ;
Если выбирать между получением метаданных по ссылке и по полному имени, то мне больше по душе метод НайтиПоТипу() .
Конечно Имя и Синоним , в примерах выше — это лишь малая часть информации, которую можно извлечь из метаданных. Но тут как говориться в помощь.
Возможно, будет полезно почитать:
- Аббатство - это католический монастырь ;
- Самые распространенные расклады ;
- Быт и обычаи Обычаи и нравы 19 века ;
- К чему снятся жабы и лягушки: мужчине, девушке, женщине, беременной – толкования разных сонников ;
- Основные характеристики марса ;
- Должностная инструкция транспортного экспедитора ;
- Татаро-монгольское иго или история о том, как ложь стала правдой ;
- Журавль толкование сонника ;