Анализ метаданных 1С:Предприятие 8
- Конфигурация 1С “Реестр метаданных”
- Набор скриптов md-streamer
- Выполнение экспорта метаданных
- Использование реестра метаданных
- Тест DaJet Script на чтение метаданных 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)
Набор скриптов md-streamer
Экспорт метаданных выполняется при помощи набора скриптов DaJet Script:
- Скрипт main.djs выполняет экспорт метаданных в конфигурацию “Реестр метаданных”.
- Остальные скрипты вспомогательные и вызываются в процессе выполнения алгоритма!
- Скрипт http.djs выполняет экспорт объектов метаданных в указанный http-сервис. Код такого http-сервиса нужно реализовать самостоятельно.
Пути к файлам вспомогательных скриптов находятся здесь: main.djs, enum.djs, object.djs, tables.djs, properties.djs, register.djs. При необходимости их следует отредактировать соответствующим образом!
Набор скриптов md-streamer (zip)
Выполнение экспорта метаданных
- В корневой каталог
code
DaJet Studio скопировать набор скриптов md-streamer. - Развернуть базу данных конфигурации “Реестр метаданных”.
- Указать в скрипте main.djs правильные строки подключения к базе-источнику метаданных (первый USE) и базе-приёмнику (второй USE). База приёмник это развёрнутая ранее конфигурация “Реестр метаданных”.
- Выполнить скрипт 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] КОНЕЦ