Метаданные в 1 с. Метаданные вложенных объектов. Что такое метаданные

Содержание
  1. 1C и ETL
  2. Внимательный взгляд
  3. Реализация «высокоуровневого» интерфейса
  4. Реализация на СУБД
  5. Data mapping
  6. Подготовка таблицы метаданных
  7. Захват изменений данных
  8. Использовать версии объектов
  9. Использовать план обмена
  10. Автоматизация бизнеса на платформе 1С:Предприятие 8
  11. 1.    Что дает доступ к метаданным конфигурации
  12. 2.    Для чего нужен доступ к структуре метаданных
  13. Глава 39 Работа с Метаданными
  14. Контекст работы с метаданными
  15. Атрибуты и методы объекта «Метаданные»
  16. Методы работы с метаданными
  17. Выбран
  18. Родитель
  19. ПолныйИдентификатор
  20. Представление
  21. ДлинаПредставленияЗначения
  22. Метаданные – это что? Работа с метаданными Три наиболее востребованных класса
  23. Зачем нужна работа с метаданными
  24. Обход метаданных в цикле
  25. Получение метаданных по ссылке объекта
  26. Получение метаданных по полному имени
  27. Что такое метаданные?
  28. Различие между данными и метаданными
  29. Метаданные файлов в компьютерах
  30. Метаданные в мировой сети
  31. Классификация метаданных
  32. Три наиболее востребованных класса
  33. Формат метаданных
  34. Возможные проблемы
  35. Получение информации о структуре хранения базы данных в терминах 1С:Предприятие и СУБД
  36. Получение структуры хранения базы данных
  37. Область применимости
  38. Подготовка базы
  39. Набор таблиц базы данных в СУБД и методе платформы
  40. Набор полей (колонок) в таблице
  41. Состав индексов
  42. Продолжаем эксперименты
  43. Задание для самостоятельной работы
  44. Выводы

1C и ETL

Метаданные в 1 с. Метаданные вложенных объектов. Что такое метаданные

Если вы, как ETL-специалист столкнулись с необходимостью получать данные из 1С, то это первое, что вы можете увидеть, попытавшись разобраться со структурой БД (это из случае MSSQL, для других СУБД картинка аналогичная): Бизнес-смысл в наименованиях таблиц и полей отсутствует, внешних ключей нет.

Пару ласковых о самой 1С. Реальные таблицы СУБД в ней скрыты за объектами, которые видит разработчик, который часто не догадывается о реальной структуре базы. Да… И весь код на русском языке. Кроме того, есть перечисления, строковые представления которых с помощью SQL получить практически невозможно.

Об этом подробнее здесь.

Есть случаи, когда БД нет (и 1С в файловой версии), но это, разумеется ориентирует вас на интеграцию без использования средств СУБД.

Однако, не стоит впадать в отчаяние, поскольку все не так плохо, как кажется.

Внимательный взгляд

Для захвата данных из 1С у вас есть 2 пути:

Реализация «высокоуровневого» интерфейса

Вы можете воспользоваться файловыми выгрузками, web/json сервисами и прочими возможностями 1С, которые окажутся совместимы с вашим ETL. +

  1. Вам не придется лезть в 1С.

    Все, что на стороне 1С должны сделать 1Сники

  2. Вы никак не нарушаете лицензионную политику 1С

  1. Появляется еще один источник для ошибок в виде дополнительных выгрузок-загрузок,
    расписаний, роботизации
  2. Это будет работать существенно медленнее из-за особенностей интерфейсов 1С
  3. При любых изменениях в захватываемых данных, вам придется вносить изменения в выгрузки (но это можно обойти настроечной системой)
  4. Это вызовет больше ошибок в целостности данных, чем работа напрямую с СУБД

Реализация на СУБД

+

  1. Работает быстрее
  2. Позволяет гарантировать полноту данных в хранилище при правильном подходе

  1. Нарушает лицензионное соглашение с 1С

Итак, взвесив за и против, вы решаете строить интеграцию через СУБД, ну или хотя бы подумать, как вы будете это делать дальше.

Data mapping

Для того, чтобы связать бизнес-данные, как их понимают на стороне 1С с реальными таблицами БД, вам потребуется выполнить немного магии в самой 1С, а именно получить описание метаданных 1С в пригодном для использования виде (в связи бизнес-объектов и таблиц).

Опять же есть, как минимум, целых 3 подхода:

  1. Используя com-соединение, web/json сервис получить таблицу соответствия из 1С
  2. Сделать то же самое на стороне 1С, сформировав таблицу метаданных
  3. Разобрать бинарный файл, который хранится в той же БД

3-й путь мне кажется несколько рискованным в силу того, что 1С имеет привычку вносить изменения в свои внутренности без предупреждения. И, при этом, довольно сложным. Выбор между 1 и 2 не столь очевиден, но на мой вкус использовать заранее сформированную таблицу гораздо удобнее, и надежнее в ежедневном использовании и нет нужды задействовать что-то, кроме чистого SQL. Хранить и поддерживать актуальность таблицы удобнее при помощи 1С, обновляя после каждого обновления конфигурации. При этом, ETL может пользоваться View, который покажет данные уже в более удобоваримой форме.

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

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

Код 1С для заполнения структуры: СтруктураБД = ПолучитьСтруктуруХраненияБазыДанных(,истина);ЗаписиСтруктура = РегистрыСведений.СтруктураКонфигурации.СоздатьНаборЗаписей();Для каждого СтрокаСтруктуры Из СтруктураБД Цикл Для каждого СтрокаПолей Из СтрокаСтруктуры.Поля Цикл Запись = ЗаписиСтруктура.Добавить(); Запись.ИмяТаблицыХранения = СтрокаСтруктуры.

ИмяТаблицыХранения; Запись.ИмяТаблицы = СтрокаСтруктуры.ИмяТаблицы; Запись.СинонимТаблицы = Метаданные.НайтиПоПолномуИмени(СтрокаСтруктуры.Метаданные); Запись.Назначение = СтрокаСтруктуры.Назначение; Запись.ИмяПоляХранения = СтрокаПолей.ИмяПоляХранения; Запись.СинонимПоля = Метаданные.НайтиПоПолномуИмени(СтрокаПолей.Метаданные); КонецЦикла;Конеццикла;ЗаписиСтруктура.

Записать(истина); Опять же все довольно просто и очевидно, несмотря на русский язык. Нужно выполнять этот код при каждом обновлении конфигурации. Делать это можно руками в обработке или при помощи регламентного задания. Таблицу можно просматривать как в режиме клиента, так и со стороны SQL, зная их имена.

SELECT * FROM _InfoReg27083 ORDER BY _Fld27085 (_InfoReg27083 — имя, которое 1С дала таблице регистра со структурой, _Fld27085 — имя поля с именем таблицы хранения) Можно сделать View, чтобы было удобнее.

Если нет возможности вносить изменения в конфигурацию, можно сделать таблицу, соединившись через com, или дописав в обработке выгрузку в таблицу базы, которая задействована в ETL.

А здесь про то, какие есть типы таблиц, и зачем они нужны (нужен доступ к ИТС 1C).

Следующий шаг — составить карту данных и описание трансформации.

Field Field1C Transformation … _Fld15704 Документ.РеализацияТоваровУслуг.Вес Check >=0, round(10,2),… …

Вот мы получили таблицу маппинга, которую можно использовать в дальнейшей работе.

Захват изменений данных

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

  1. Использовать версии объектов
  2. Использовать план обмена

Использовать версии объектов

Для объектов «ссылочного» типа 1С поддерживает версии. Номер версии объекта записывается в бинарное поле _version, аккуратно обновляющееся при каждом обновлении записи. На MSSQL, например, это поле типа timestamp. Версии поддерживаются для объектов типа «Документ»,«Справочник»,«Бизнес-процесс»,«Задача»,«План счетов»,«План видов характеристик», «Константы».

Использовать версию довольно просто, сохранив у себя в staging area значение последней версии для объекта, и при следующем обновлении выбрав объекты, большие по значению поля версии. Вместе с «основным» объектом нужно не забыть забрать его табличные части (см.

Назначение — «Табличная часть») в структуре (поле вида _DocumentXXX_IDRRef или _ReferenceXXX_IDRRef — ссылка на основную таблицу).

Использовать план обмена

Для не ссылочных типов такой подход не годится, но можно воспользоваться объектом «план обмена». В таблице структуры их назначение = 'РегистрацияИзменений'. Для каждого объекта конфигурации создается отдельная таблица плана обмена. На уровне БД это таблица, вот такой структуры: _NodeTRef, — идентификатор типа «узла» плана обмена.

Он нам не очень интересен _NodeRRef, — идентификатор узла плана обмена _MessageNo, — номер сообщения Дальше идут поля ключа «основной» таблицы.

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

Так же может быть ключ таблицы регистра сведений, если он не подчинен регистратору. Для того, чтобы такая таблица регистрации изменений существовала, нужно включить в конфигураторе 1С нужный нам объект в план обмена. Кроме того, нужен быть создан узел плана обмена, идентификатор (_IDRRef) которого наим нужно будет использовать.

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

Как забирать данные через план обмена: Для начала мы пишем update к плану обмена, где ставим произвольный _MessageNO (лучше всегда 1). Например

UPDATE _DocumentChangeRec18901 set _MessageNO = 1 WHERE _NodeRRef = @_NodeRRef

Далее выбираем данные из таблицы данных, связав ее по ключу с таблицей плана обмена

SELECT [fieldslist] FROM _Document18891 inner join _DocumentChangeRec18901 ON _Document18891._IDRRef = _DocumentChangeRec18901._IDRRef and _MessageNO = 1 AND _NodeRRef = @_NodeRRef

И подтверждаем забор изменений, удалив записи таблицы изменений

DELETE FROM _DocumentChangeRec18901 WHERE _MessageNO = 1 AND _NodeRRef = @_NodeRRef

Итого: Мы научились читать на стороне ETL метаданные 1С, научились выполнять захват данных. Остальные шаги процесса ETL достаточно хорошо известны. Например, можно почитать здесь.

Хабы:

  • Администрирование баз данных
  • Хранилища данных

Источник: https://habr.com/ru/post/334798/

Автоматизация бизнеса на платформе 1С:Предприятие 8

Метаданные в 1 с. Метаданные вложенных объектов. Что такое метаданные

1.    Что дает доступ к метаданным конфигурации

2.    Для чего нужен доступ к структуре метаданных  

1.    Что дает доступ к метаданным конфигурации

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

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

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

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

2.    Для чего нужен доступ к структуре метаданных

Доступ к структуре метаданных осуществляется через Метаданные глобального контекста. Данное свойство предоставляет доступ непосредственно к корневому объекту конфигурации и коллекциям объектов. Каждый объект метаданных 1С предоставляет доступ к своим свойствам и подчиненным объектам. Так данная возможность требуется для получить доступ к множеству объектов.

Например:

Сообщить(Метаданные.Документы.Счет.Реквизиты.Контрагент);

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

Например:

Док = Документы.Счет.СоздатьДокумент();

Сообщить(Док.Метаданные().ПолноеИмя());

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

Например:

Выборка = Документы.Счет.Выбрать();

Сообщить(Метаданные.НайтиПоТипу(ТипЗнч(Выборка)));

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

Например:

Сообщить(Метаданные.ОсновнаяФормаКонстант = Метаданные.ОбщиеФормы.Основная);

С помощью метода Родитель() можно получить вышестоящий объект метаданных 1С.

Например:

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

Для представления объекта метаданных 1С пользователю нужно использовать преобразование значения к строке или метод Представление().

Например:

Сообщить(Метаданные.Справочники.РасчетныеСчета);

Сообщить(Метаданные.Справочники.РасчетныеСчета.Представление());

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

Например:

Сообщить(Метаданные.ОбщиеФормы.Основная.ПолноеИмя());

Метаданные можно использовать, чтобы проверить, относится ли, например, значение к справочникам.

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

Например:

Сообщить(Метаданные.Документы.Счет.ПериодичностьНомера =
Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Год);

Некоторые свойства объектов метаданных являются коллекциями значений и представляются типом КоллекцияЗначенийСвойстваОбъектаМетаданных.

Например:

Сообщить(Метаданные.Документы.Счет.ВводитсяНаОсновании.Количество());

Сообщить(Метаданные.Документы.Счет.ВводитсяНаОсновании.Содержит(Метаданные.Справочники.Контрагенты));

В документации, описывающей работу с объектами метаданных, приводятся также описания специфических типов свойств метаданных, например, таких как ПараметрыВводаПоСтроке.

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

Для получения форм и макетов используются специализированные методы.

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

Например:

Стиль = БиблиотекаСтилей.СтильФормКомпании;

ЭлементыФормы.Кнопка1.ЦветТекстаКнопки = ЦветаСтиля.ЦветПредупреждения;

ЭлементыФормы.Кнопка1.Картинка = БиблиотекаКартинок.Автозаполнение;

Для проверки прав текущего пользователя используются специализированные методы глобального контекста ПравоДоступа() и ПараметрыДоступа().

Специалист компании ООО «Кодерлайн» 

Брежицкий Никита.

Источник: https://www.koderline.ru/expert/instruktsii/article-rabota-s-obektami-v-1s/

Глава 39 Работа с Метаданными

Метаданные в 1 с. Метаданные вложенных объектов. Что такое метаданные

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

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

Контекст работы с метаданными

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

Объект типа «Метаданные» имеет атрибуты для доступа к свойствам объекта метаданных и методы для доступа к массивам подчиненных объектов метаданных.

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

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

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

Кроме того, объект типа «Метаданные» можно использовать в качестве параметров, в тех методах, где требуется указать тип данных строкой, например в третий параметр метода ВвестиЗначение(, , , ), но передавать можно только значения метаданных, описывающие типизированные объекты, например, Метаданные.Справочник(1).Реквизит(1), т. к. реквизит справочника — типизированный объект.

Англоязычный синоним ключевого слова Метаданные — Metadata.

Пример:

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

Атрибуты и методы объекта «Метаданные»

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

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

Пример:

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

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

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

·         число — выдает объект метаданных по указанному номеру;

·         строка — выдает объект метаданных по указанному идентификатору;

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

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

Для Инд = 1 По Метаданные.Документ() Цикл

   Сообщить(Метаданные.Документ(Инд).Идентификатор);

КснецЦикла;

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

Пример:

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

   Сообщить(Метаданные.ГрафаОтбора(Идент).

              Ссылки.Получить(Инд).ПолныйИдентификатор());

КонецЦикла;

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

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

Дополнительные методы работы с метаданными приведены ниже.

Выбран

Проверяет спозиционирован ли объект типа «Метаданные» на конкретном объекте метаданных или нет.

Синтаксис:

Выбран()

Англоязычный синоним:

Selected

Возвращаемое значение:

Число: 1 — если объект соответствует объекту метаданных (спозиционирован); 0 — если не соответствует.

Описание:

Метод Выбран возвращает число со значением 1 — объект соответствует объекту метаданных (спозиционирован), 0 — если не соответствует. Например, при обращении к массиву подчиненных метаданных по идентификатору, если метаданного с таким идентификатором не существует, возвращается не спозиционированный объект типа «Метаданные».

Пример:

Если Метаданные.Справочник(“Организации”).Выбран() = 1 Тогда

   Сообщить(“Есть справочник органиазаций”);

КонецЕсли;

Родитель

Возвращает объект метаданных, которому подчинен данный объект.

Синтаксис:

Родитель()

Англоязычный синоним:

Parent

Возвращаемое значение:

Объект метаданных, которому подчинен данный объект.

Описание:

Метод Родитель возвращает объект метаданных, которому подчинен данный объект.

Пример:

Сообцить(“Реквизит принадлежит документу” + РеквМД.Родитель().Идентификатор);

ПолныйИдентификатор

Возвращает полный идентификатор объекта.

Синтаксис:

ПолныйИдентификатор()

Англоязычный синоним:

FullIdentifier

Возвращаемое значение:

Идентификатор объекта с идентификаторами его родителей через точку.

Описание:

Метод ПолныйИдентификатор возвращает идентификатор объекта с идентификаторами его родителей через точку, например: “Документ.Счет.Цена”.

Пример:

Сообщить(“Реквизит ” + РеквМД.ПолныйИдентификатор());

Представление

Возвращает представление объекта.

Синтаксис:

Представление()

Англоязычный синоним:

Present

Возвращаемое значение:

Строковое значение представления объекта.

Описание:

Метод Представление возвращает синоним объекта, а если он не задан, то идентификатор.

Пример:

Получение списка видов документов:

Спис = СоздатьОбъект(“СписокЗначений”);

Для Инд = 1 По Метаданные.Документ() Цикл

   Идент = Метаданные.Документ(Инд).Идентификатор;

   Предст = Метаданные.Документ(Инд).Представление();

   Спис.ДобавитьЗначение(Идент, Предст);

КонецЦикла;

ДлинаПредставленияЗначения

Возвращает длину представления значения.

Синтаксис:

ДлинаПредставленияЗначения(, , )

Англоязычный синоним:

ValuePresentLen

Параметры:

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

Возвращаемое значение: возвращает длину представления значения.

Описание:

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

Пример:

Ширина =

   Метаданные.Документ(1).РеквизитШапки(2).ДлинаПредставленияЗначения(5, 50, 30)


Источник: http://anatoly4xs.narod.ru/manual/lang/lang039.htm

Метаданные – это что? Работа с метаданными Три наиболее востребованных класса

Метаданные в 1 с. Метаданные вложенных объектов. Что такое метаданные

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

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

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

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

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

А с использованием метаданных мы можем программно обойти все справочники, а затем для каждого справочника можем проанализировать все его реквизиты. И в случае если искомый реквизит найден обработать все элементы справочника. Этот подход значительно уменьшит количество кода и предварительной ручной работы.

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

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

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

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

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

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

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

Соответственно если у нас есть ссылка нам надо сначала узнать ее тип. Сделать это поможет функция ТипЗнч(). В качестве примера возьмем справочник Пользователи (т.к. он есть наверное во всех конфигурациях).

Выберем из него первый попавшийся элемент и получим по нему метаданные.

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

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

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

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

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

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

Существует множество баз данных. Чтобы понять, что они собой представляют, необходимо рассматривать их содержимое. Но есть одна маленькая полезная деталь – метаданные. Это то, что обобщает всю имеющуюся информацию. Для чего они были разработаны и зачем используются?

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

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

В основном используется четыре обозначения данного термина:

  1. Могут подразумевать субканальную информацию про используемые данные.
  2. Так называют характеристики, описывающие сущность. Они необходимы, чтобы искать, идентифицировать, оценивать и управлять значениями в БД. Ещё таким образом называют важный набор определённого количества структурированных описаний, предоставленных в допустимой форме и доступных в явном виде, благодаря чему можно найти необходимый объект. Подобная формулировка применяется в случаях, когда необходимо искать сущности, ресурсы и объекты.
  3. Данные из общей формальной системы, которые описывают свойства конкретного хранилища информации.
  4. Информация про характеристики веб-страницы (когда была создана, кто её автор).

Различие между данными и метаданными

Как их отличают? Дело в том, что провести однозначное разделение обычно невозможно. Почему? Давайте рассмотрим более детально на примере:

  1. Что-то может выступать в обеих ролях. Например, заголовок статьи может рассматриваться и как элемент метаданных, и в качестве информации, что передаётся читателю.
  2. Возможность меняться местами. Допустим, кто-то написал стихотворное произведение. Оно представляет собой данные. Композитор, опираясь на слова, создал музыкальную композицию и прикрепил данный текст. В таком случае он превращается в метаданные. Всё зависит от использования. Вообще, подобные случаи возможны из-за восприятия определённой точки зрения на основании своих суждений (тут играет роль пространство имён и система отсчёта).
  3. Возможность создания мета-…-метаданных ориентируясь на аксиому выбора. Это вытекает из того, что почти на любую информацию может быть создана своя система характеристик.

Метаданные файлов в компьютерах

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

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

Метаданные в мировой сети

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

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

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

Классификация метаданных

Как их различают? В основном классификация проводится по одному из двух принципов:

  1. . Метаданные используются, чтобы описывать файл, ресурс или его содержимое (к примеру, заголовок – «как готовить картошку»).
  2. По принадлежности. Метаданные могу использовать, чтобы информировать о чем-то целом или его составляющей. Так, название фильма относится ко всему нему, а описание эпизода информирует только об определенной части.

Если метаданные – это совокупность зависимостей от возможностей логического вывода, то в таком случае они делятся на 3 вида:

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

Такие типы метаданных существуют.

Три наиболее востребованных класса

Предлагаем ознакомиться с тремя классами, которые сейчас широко применяются:

  1. Внутренние метаданные. Это информация, которая описывает составные части вещей, их структуру и что она собой представляет. В качестве примера можно привести размер и формат файла.
  2. Административные метаданные. Требуются для процессов обработки информации, а также для назначения вещи. Например, кто автор, редактор, когда был создан файл.
  3. Описательные метаданные. Используются, чтобы охарактеризовать природу файла и его признаки (к какой категории относится, с чем ещё связан).

Формат метаданных

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

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

Возможные проблемы

Когда может возникать ошибка метаданных? Отсутствие необходимой информации или ограничение доступа – вот основные причины возникающих проблем.

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

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

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

Из программы на языке 1С доступен список метаданных 1С и их свойства.

Это удобно, когда требуется получить список документов в конфигурации или отработать все реквизиты документа.

Рассмотрим, как работать с метаданными 1С конфигурации из языка 1С.

Метаданные 1С конфигурации

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

Пример – создадим список всех документов конфигурации для того, чтобы пользователь мог выбрать нужный документ из списка:
спДокументовКонфигурации = Новый СписокЗначений(); //сюда будем сохранять список

//Метаданные – глобальная переменная, которая дает доступ ко всем метаданным 1С конфигурации//Метаданные.Документы – коллекция документов конфигурацииДля каждого Документ из Метаданные.Документы Цикл //Документ – это метаданные 1С документа (каждого, так как мы обходим их в цикле) //.

Имя – наименование документа так, как оно задано в конфигурации //.Синоним – “человеческое” наименование документа, которое отображается пользователю //список значений может хранить значение (имя документа) и “представление для пользователя” (как раз – синоним документа) спДокументовКонфигурации.Добавить(Документ.

Имя, Документ.Синоним);

КонецЦикла;

Источник: https://nauet.ru/metadannye-eto-chto-rabota-s-metadannymi-tri-naibolee-vostrebovannyh-klassa/

Получение информации о структуре хранения базы данных в терминах 1С:Предприятие и СУБД

Метаданные в 1 с. Метаданные вложенных объектов. Что такое метаданные

Часто возникает необходимость определить в какой таблице СУБД хранится тот или иной объект метаданных. Или наоборот, какой объект метаданных соответствует определенной таблице СУБД.

Здесь стоит упомянуть, что имена таблиц и полей СУБД, в которых хранятся объекты метаданных 1С:Предприятия, не соответствуют именам объектов метаданных, их реквизитам, измерениям, ресурсам.

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

Получение структуры хранения базы данных

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

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

Далее идут колонки описывающие к какому метаданному относится таблица и назначение этой таблицы СУБД. Последние две колонки содержат вложенные таблицы значений полей и индексов таблицы СУБД.

В таблице полей содержится соответствие имен полей в терминах СУБД и терминах 1С:Предприятие, а так же связь поля с объектом метаданного (какой реквизит/ресурс/измерение).

Таблица индексов содержит набор имен индексов, а так же вложенную таблицу значений, содержащую поля таблицы СУБД, включенные в состав индекса, и соответствие их имен в терминах СУБД и 1С:Предприятие.

Структура хранения базы данных

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

Мы не будем рассматривать как его сделать, поскольку, эта задача с одной стороны простая, с другой каждый может привнести в нее свои «фишки». Пример такого инструмента (обработки) вы можете найти во вложении к статье.

Ниже приведен скриншот обработки.

Обработка «Структура хранения базы данных»

Область применимости

Давайте попробуем проанализировать ту информацию, которую нам предоставляет платформа с помощью метода ПолучитьСтруктуруХраненияБазыДанных() и сопоставим ее с реальной структурой СУБД (рассмотрим на примере MS SQL Server).

Сразу оговорюсь что метод имеет 2 параметра: первый устанавливает отбор на метаданные по которым необходимо получить информацию; второй устанавливает режим вывода информации: «В терминах СУБД» или «В терминах 1С:Предприятие» (данная опция так же присутствует в обработке).

Представленный ниже текст относится к режиму вывода «В терминах 1С:Предприятие» если не указано иного.

Подготовка базы

Давайте создадим пустую информационную базу в режиме совместимости с 8.2.16, основной режим запуска установим «обычное приложение». В конфигурацию добавим 2 документа (со значениями по умолчанию) и регистр сведений «АнализСтруктурыХранения» (периодичность в пределах дня). У регистра добавим реквизиты:

  1. «Число»: тип число
  2. «Строка»: тип строка
  3. «ДокументСсылка»: тип ДокументСсылка1
  4. «СоставнойЧислоСтрока»: составной тип Число и Строка
  5. «СоставнойДокументСсылка»: составной тип ДокументСсылка1 и ДокументСсылка2
  6. «СоставнойЧислоСтрокаДокументСсылки»: составной тип Число, Строка, ДокументСсылка1, ДокументСсылка2

Далее добавим общий реквизит «Разделитель» (тип Число), в состав включим наши документы и регистр сведений. Установим «Разделение данных» в «разделять» и разрешим создать параметры сеансов, «Использование разделяемых данных» установим в значение «независимо и совместно». Обновим конфигурацию.

Набор таблиц базы данных в СУБД и методе платформы

Откроем обработку в 1С:Предприятие, а также откроем список таблиц базы данных в СУБД и сравним их. Как видно, метод ПолучитьСтруктуруХраненияБазыДанных() вернул не полный список таблиц базы, который мы можем увидеть на уровне СУБД, а набор таблиц за исключением системных таблиц, таких как Config, ConfigSave, v8users и другие.

Структура базы данных на уровне СУБД и платформы

Набор полей (колонок) в таблице

Перейдем теперь к нашему регистру сведений. Получим набор полей таблицы регистра с помощью обработки, а так же получим набор колонок в СУБД и сравним их.

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

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

Это связано со способом хранения информации платформой и более подробно можно прочесть на сайте ИТС. Замечу, что при анализе запроса в СУБД или анализе плана запроса необходимо учитывать этот факт и правильно интерпретировать имена колонок.
Структура полей (колонок) в таблице базы данных

Состав индексов

Проведем аналогичное сравнение индексов и их состава, полученных обработкой и реально существующих в СУБД. Первое что бросается в глаза, это 12 индексов в таблице СУБД, в то время как обработка выводит только 2.

По своей сути все верно, если индексы разделить по «назначению» («ByDims» — по измерениям, и «ByPeriod» — по периоду).

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

Так, в нашем примере реквизит «СоставнойЧислоСтрока» включает 2 примитивных типа, а «СоставнойЧислоСтрокаДокументСсылки» включает 2 примитивных типа и ссылочные (их количество не важно, важно наличие хотя бы одного). Таким образом, платформа создала комбинации индексов: ЧислоЧисло, ЧислоСтрока, ЧислоСсылка, СтрокаЧисло, СтрокаСтрока, СтрокаСсылка.

Откроем состав одного из индексов и сопоставим поля. Как видно, в СУБД первым полем индекса стоит «Fld12», (по таблице полей можно определить что это «Разделитель«) и оно отсутствует составе индекса, выведенного в обработке.

Структура и состав индексов на уровне СУБД и платформы

Продолжаем эксперименты

Давайте продолжим наши эксперименты и (в исследовательских целях) нарушим лицензионное соглашение. Для того чтобы быть уверенными что не сломаем нашу базу данных, сделаем ее резервное копирование средствами СУБД.

Сделаем следующие вещи:

  1. Откроем в СУБД индекс «ByDocNum» объекта Документ1 и поменяем порядок следования полей Number и IDRRef
  2. Удалим в СУБД индекс «ByDocDate» объекта Документ1
  3. Добавим в СУБД колонку, например, «MyColumn» с числовым типом в таблицу регистра сведений
  4. Добавим в СУБД в нашу базу данных новую таблицу, например, «MyTable»

Откроем нашу обработку и проверим что получилось:

  1. Платформа не знает о том что порядок полей в индексе был изменен
  2. Платформа не знает о том что индекс удален
  3. Платформа не видит добавленную колонку
  4. Платформа не видит добавленную таблицу

Задание для самостоятельной работы

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

Выводы

Метод ПолучитьСтруктуруХраненияБазыДанных() предоставляет достаточно полную и корректную информацию о структуре хранения базы данных, а так же выводит соответствия имен таблиц, их колонок, и индексов в терминах СУБД и 1С:Предприятие. Но, при этом есть некоторые ограничения при работе с этим методом:

  1. Нет информации о системных таблицах (но она особо и не нужна)
  2. Состав полей отражается с точки зрения 1С, а не с точки зрения хранения в СУБД (только в терминах 1С:Предприятие)
  3. Набор индексов так же отражается с точки хранения 1С, а не с точки зрения СУБД (только в терминах 1С:Предприятие)
  4. Некоторые существующие поля индекса могут быть не отражены в составе индекса на уровне платформы (только в терминах 1С:Предприятие)
  5. Информация, видимо, строится не по структуре базы данных, а по некому представлению платформы о структуре базы на основании метаданных конфигурации и их свойств
  6. Необходимо иметь ввиду что механизм работы метода может быть изменен в другой версии платформы

Таким образом, если необходимо получить точную информацию о структуре базы данных, необходимо получать эту информацию с помощью СУБД, а при получении данных методом ПолучитьСтруктуруХраненияБазыДанных() лучше использовать режим «В терминах СУБД»

Источник: https://ausevich.ru/ekspert/poluchenie-informatsii-o-strukture-khraneniya-bazy-dannykh-v-terminakh-1s-predpriyatie-i-subd/

Помощь юриста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: