Skip to the content.

Начало

Анализ метаданных 1С:Предприятие 8

Для анализа метаданных 1С:Предприятие 8 реализован специальный процессор Metadata Streamer.

Данный процессор DaJet Script позволяет организовать обработку метаданных в виде потока сообщений аналогично работе команды STREAM. Каждое сообщение - это отдельный объект метаданных 1С:Предприятие 8 и имеет тип object. Обработать такое сообщение можно всеми доступными средствами DaJet Script. Выгрузить можно метаданные любой конфигурации 1С:Предприятие 8. Актуальный список поддерживаемых DaJet Script объектов метаданных 1С можно найти в разделе документации “Реляционные базы данных”.

Ниже приводится один из возможных вариантов практического использования Metadata Streamer.

Конфигурация 1С “Реестр метаданных”

Целевой базой данных решения для экспорта метаданных является конфигурация 1С:Предприятие 8 “Реестр метаданных”. Схема таблиц этой информационной базы представлена на диаграмме ниже. По ссылке можно найти описание конфигурации и скачать файл cf.

Конфигурация “Реестр метаданных” (cf)

metadata-registry-database-schema

Набор скриптов md-streamer

Экспорт метаданных выполняется при помощи набора скриптов DaJet Script:

Пути к файлам вспомогательных скриптов находятся здесь: main.djs, enum.djs, object.djs, tables.djs, properties.djs, register.djs. При необходимости их следует отредактировать соответствующим образом!

Набор скриптов md-streamer (zip)

Наверх

Выполнение экспорта метаданных

  1. В корневой каталог code DaJet Studio скопировать набор скриптов md-streamer.
  2. Развернуть базу данных конфигурации “Реестр метаданных”.
  3. Указать в скрипте main.djs правильные строки подключения к базе-источнику метаданных (первый USE) и базе-приёмнику (второй USE). База приёмник это развёрнутая ранее конфигурация “Реестр метаданных”.
  4. Выполнить скрипт main.djs.

Выполнить набор скриптов можно также при помощи DaJet Script Host.

Внимание! Конфигурация 1С:УНФ выгружается приблизительно 10 минут. Обрабатывается 3 364 объектов. В конфигурации “Реестр метаданных” создаётся 138 352 объектов, в том числе для описания колонок таблиц СУБД, а также таблица логических ссылок между объектами конфигурации и таблица значений перечислений. Размер базы данных приёмника на SQL Server получается около 110 Мб.

Наверх

Запрос значений перечисления

Запрос находится по следующему пути /code/md-streamer/query/enum-values.djs. Предполагается использование DaJet Studio. Запрос выполняется к базе данных конфигурации “Реестр метаданных”.

DECLARE @table array

USE 'mssql://server/metadata-registry'

   SELECT Значение = Значения.Наименование
        , Ссылка   = Значения.Значение
        , Синоним  = Значения.Синоним
     INTO @table
     FROM Справочник.ЗначенияПеречислений AS Значения
    INNER JOIN Справочник.ОбъектыМетаданных AS Объекты ON Объекты.Ссылка = Значения.Владелец
    INNER JOIN Справочник.ИнформационныеБазы AS ИнфоБазы ON ИнфоБазы.Ссылка = Объекты.Владелец
    WHERE ИнфоБазы.Наименование       = 'УправлениеНебольшойФирмой'
      AND ИнфоБазы.ВерсияКонфигурации = '3.0.4.45'
      AND Объекты.Тип                 = 'Перечисление'
      AND Объекты.Наименование        = 'НДФЛСтавкиУНФ'

END

RETURN @table

Результат выполнения скрипта enum-values.djs

Значение Ссылка Синоним
Ставка09 c22f4c07-316a-4b9a-bbaf-fd677d241f2a 9%
Ставка13 da2e73cc-3fc2-4a12-80f0-777b4e0495e6 13%
Ставка15 740a980b-0eaf-44f4-a768-40f7a772167c 15%
Ставка30 40d63a57-e226-4c24-8191-093836b7352a 30%
Ставка35 a1726df2-df53-4479-ade9-c32f5df12b1e 35%

Наверх

Запрос структуры объекта метаданных в СУБД

Запрос находится по следующему пути /code/md-streamer/query/object.djs. Предполагается использование DaJet Studio. Запрос выполняется к базе данных конфигурации “Реестр метаданных”.

DECLARE @table array

USE 'mssql://server/metadata-registry'

   SELECT Свойство    = Свойства.Наименование
        , ТипСвойства = Свойства.ОписаниеТипов
        , Колонка     = Колонки.Наименование
        , Назначение  = Колонки.Назначение
     INTO @table
     FROM Справочник.КолонкиТаблиц AS Колонки
    INNER JOIN Справочник.СвойстваОбъектов AS Свойства ON Свойства.Ссылка = Колонки.Владелец
    INNER JOIN Справочник.ОбъектыМетаданных AS Объекты ON Объекты.Ссылка = Свойства.Владелец
    INNER JOIN Справочник.ИнформационныеБазы AS ИнфоБазы ON ИнфоБазы.Ссылка = Объекты.Владелец
    WHERE ИнфоБазы.Наименование       = 'УправлениеНебольшойФирмой'
      AND ИнфоБазы.ВерсияКонфигурации = '3.0.4.45'
      AND Объекты.Тип                 = 'РегистрСведений'
      AND Объекты.Наименование        = 'ЦеныНоменклатуры'

END

RETURN @table

Результат выполнения скрипта object.djs

Свойство ТипСвойства Колонка Назначение
Автор Ссылка(93,fa1ef4b3-fc76-4b08-bb66-d89a7a1b66b1) _Fld7571RRef Значение
Актуальность Булево _Fld7569 Значение
ВалютаЦены Ссылка(24,dd096f26-1cbd-44c2-a139-9c8c10b07fb9) _Fld51807RRef Значение
ВидЦен Ссылка(36,5ae16e4d-0888-4826-96cf-8cbc3b23e9ab) _Fld7565RRef Значение
ВключаяХарактеристики Булево _Fld9158 Значение
ДокументУстановки Ссылка(29643,6c36eb1d-354b-48aa-8176-eb8578cfa3d5) _Fld31701RRef Значение
ЕдиницаИзмерения Ссылка(0,00000000-0000-0000-0000-000000000000) _Fld7570_RRRef Ссылка
ЕдиницаИзмерения Ссылка(0,00000000-0000-0000-0000-000000000000) _Fld7570_RTRef КодСсылки
ЕдиницаИзмерения Ссылка(0,00000000-0000-0000-0000-000000000000) _Fld7570_TYPE Дискриминатор
Номенклатура Ссылка(76,bea7f781-5f18-4219-997c-9a767fb284be) _Fld7566RRef Значение
Период ДатаВремя _Period Значение
Характеристика Ссылка(141,0b18a281-0eaf-4722-8e1f-b9cc0be808ef) _Fld7567RRef Значение
Цена Число(15,2) _Fld7568 Значение
ОбластьДанныхОсновныеДанные Число(7,0) _Fld405 Значение

Наверх

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

Следующий запрос отвечает на вопрос: “На какие объекты ссылается свойство ДокументОснование документа УстановкаЦенНоменклатуры ?”. Запрос находится по следующему пути /code/md-streamer/query/references.djs. Предполагается использование DaJet Studio. Запрос выполняется к базе данных конфигурации “Реестр метаданных”.

DECLARE @table array

USE 'mssql://server/metadata-registry'

   SELECT Свойство  = Свойства.Наименование
        , КодТипа   = Ссылки.Код
        , ПолноеИмя = Ссылки.ПолноеИмя
        , Ссылка    = Ссылки.Идентификатор
     INTO @table
     FROM Справочник.ВнешниеСсылки AS Ссылки
    INNER JOIN Справочник.СвойстваОбъектов AS Свойства ON Свойства.Ссылка = Ссылки.Владелец
    INNER JOIN Справочник.ОбъектыМетаданных AS Объекты ON Объекты.Ссылка = Свойства.Владелец
    INNER JOIN Справочник.ИнформационныеБазы AS ИнфоБазы ON ИнфоБазы.Ссылка = Объекты.Владелец
    WHERE ИнфоБазы.Наименование       = 'УправлениеНебольшойФирмой'
      AND ИнфоБазы.ВерсияКонфигурации = '3.0.4.45'
      AND Объекты.Тип                 = 'Документ'
      AND Объекты.Наименование        = 'УстановкаЦенНоменклатуры'
      AND Свойства.Наименование       = 'ДокументОснование'

END

RETURN @table

Результат выполнения скрипта references.djs

Свойство КодТипа ПолноеИмя Ссылка
ДокументОснование 153 Документ.АвансовыйОтчет 84e4c0c3-2a21-4aba-a7b0-f92b3f2878ec
ДокументОснование 175 Документ.ОприходованиеЗапасов ddedc4ab-0149-4852-93a6-c895e2793772
ДокументОснование 196 Документ.ПриходнаяНакладная bfd8a708-f45e-44e7-bcd0-d6d6b985ef12

Наверх

Тест DaJet Script на чтение метаданных 1С:Предприятие 8

Процессор Metadata Streamer дополнительно реализует специальную команду check-database-schema. Эта команда позволяет проверить правильность чтения метаданных той или иной конфигурации 1С:Предприятие 8 при помощи DaJet Script. Проверка заключается в сравнении зачитанных метаданных на соответствие реальной схеме соответствующей базы данных. Сравниваются имена таблиц и колонок СУБД. Расхождения записываются в лог программы dajet.log.

Пример ниже демонстрирует как процессор Metadata Streamer выполняет анализ метаданных и сообщает, что DaJet не учёл колонки _dimhash для таблиц регистров накопления. Это означет, что в запросах DaJet Script обратиться к этим колонкам будет невозможно. Это не считается критической ошибкой, но тем не менее может быть полезно знать.

DECLARE @Объект object
DECLARE @Команда string = 'check-database-schema'

PRINT '[' + @Команда + '] НАЧАЛО'

USE 'mssql://server/unf'

   PROCESS @Команда WITH DaJet.Runtime.MetadataStreamer INTO @Объект

END

PRINT '[' + @Команда + '] КОНЕЦ'

RETURN '[' + @Команда + '] ' + NOW()

Результат выполнения скрипта в файле dajet.log

[2025-01-31 22:23:17] [check-database-schema] НАЧАЛО
[2025-01-31 22:23:25] [_AccumRg29548] ДвиженияДенежныхСредств
[2025-01-31 22:23:25] * insert (отсутствующие поля)
[2025-01-31 22:23:25]   - _dimhash
[2025-01-31 22:23:25] [_AccumRg8102] Продажи
[2025-01-31 22:23:25] * insert (отсутствующие поля)
[2025-01-31 22:23:25]   - _dimhash
[2025-01-31 22:23:25] [check-database-schema] КОНЕЦ

Наверх