gifts2017

Clr-функция для работы с метаданными 1С 8.1

Опубликовал 1 1 (dglucas_) в раздел Программирование - Теория программирования

Идея была подсказана на этом сайте. Clr-функция позволяет работать с метаданными клиент-серверной (MS SQL) 1С 8.1.

Clr-функция, которая позволяет работать с метаданными (таблицы Config, Params) 1С 8.1. Читает данные из полей sqlbinary, обрабатывает их, проводя декомпрессию соответствующего потока байтов и выделяя ключи 1С. Развернуть проще на VS 2008: создать sql -проект, подключиться к базе [Adv] ( к примеру), добавить в проект приложенную функцию fn_GetBinary() и развернуть на свой sql-сервер. В указанную базу предварительно установить свою клиент-серверную 1С. Скрипт для проверки в Тест.sql. Собственно, это только демонстрация идеи. Но все работает. Можно, например, легко сопоставить имена в 1С именам на MS SQL.

Скачать файлы

Наименование Файл Версия Размер
clr.rar 69
.rar 4,29Kb
04.09.14
69
.rar 4,29Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Андрей Д. (detec) 19.08.10 18:28
Просьба развёрнуто пояснить: что подразумевается под работой с метаданными?
2. Евгений (wirg) 19.08.10 18:34
Ничего не понятно из описания.
3. 1 1 (dglucas_) 19.08.10 18:54
Под "работой с метаданными" в контексте данной темы следует понимать извлечение любых данных, содержащихся в конкретной конфигурации 1С (только для MS SQL). :D
4. Роман Осадченко (cleaner_it) 19.08.10 18:57
Не понятна цель изложенных в (0) действий. Картинок нет, описания развертки проекта нет...
5. Роман Осадченко (cleaner_it) 19.08.10 18:59
(3) - то есть можно просмотреть пользовательские данные 1С? Список элементов справочника/документа/регистра?
6. 1 1 (dglucas_) 19.08.10 19:13
Да. Описание развертки проектов для создания clr-функций можно найти в хелпе Майкрософт. Оно стандартное, без особенностей для конкретной ситуации. :D
7. Сергей Троицкий (tsd) 19.08.10 19:20
(6) ага, но здесь не настоящие программисты ;) , и половине народа (мне в том числе) не понятно в чем фишка.
А нафига все это надо? И в чем собственно говоря идея, демонстрацию которой Вы делаете? С метаданными я и так могу работать (в локальной базе через сом и т.п.).
8. Герман (German) 19.08.10 21:54
:!: :!: :!: :!: :!:
Сильно. Автору респект.
Минусы и нытье в комментах непонятно.
ИМХО. Это самая сильная вещь на ИС за последние 2 года с момента опубликования V8unpack
9. Валерий Агеев (awa) 19.08.10 23:42
(8) German, не преувеличивай. Всё, что здесь есть - это чтение двоичных данных из поля BINARYDATA таблиц CONFIG и PARAMS и их распаковка (deflate).
В качестве примера производится парсинг записи DBNames из таблицы PARAMS, содержимое которой имеет вид

...
{92b8043c-b023-496a-9498-fcfad09de34a,"Fld",394},
{c38ad01d-6049-4ff0-a15f-e8e89616971c,"ByParentField",395},
{c38ad01d-6049-4ff0-a15f-e8e89616971c,"ByField",396},
{f47b419b-4aed-4975-83d8-978c710710d1,"ReferenceChangeRec",397},
{41bda9ce-9cd4-4285-afc9-c5126dc0330e,"Fld",398},
...

и попытка чтения всех подряд полей с GUID-именами, распарсенными из DBNames, в таблице CONFIG.
То, что в DBNames содержатся идентификаторы не только основных таблиц объектов 1С, а также идентификаторы полей, индексов и вспомогательных таблиц объектов 1С, никак не учитывается. Также нет никакого реального разбора данных из CONFIG. На самом деле, разбор метаданных надо начинать с записи root таблицы CONFIG. Так что, до реального извлечения "любых данных, содержащихся в конкретной конфигурации 1С" еще очень далеко.

А минусы, как я понимаю, за совершенно невнятное описание, что же на самом деле выложено.
theshadowco; +1 Ответить 1
10. Герман (German) 20.08.10 08:36
(9) пример бессмысленный, но я считаю полезной именно саму технологию распаковки.
идею можно развить в действительно полезные вещи.
11. 1 1 (dglucas_) 20.08.10 09:14
Согласен с German. Я ведь и писал именно про демонстрацию идеи и ее оценку хотел получить (для начала).Что же касается ''реального извлечения", то до него уже не так уж далеко. Собственно, модифицирована функция, и примеры. Просто я не очень понимаю, как это добавить сюда.

Что касается мутности описания, оно действительно рассчитано на людей, которые знают про clr и проблему с sqlbinary в 1cv8. ;)
12. Валерий Агеев (awa) 20.08.10 09:17
(10) Какая технология? Вся технология заключается в распаковке двоичных данных (deflate). Двоичные данные упакованы zip-ом и хранятся как поток без заголовка. Это давным давно всем известно, точно также потоки упакованы в cf. Т.е. вся технология, представленная в этой публикации заключается в строке

DeflateStream deflstrm = new System.IO.Compression.DeflateStream(param.Stream, CompressionMode.Decompress);

То же самое делает zlib1.dll, который используется в v8unpack. То же самое я делаю в Tool_1CD c помощью библиотеки Abbrevia. Нет в этой публикации ничего нового.
Минусов, конечно, автор не заслуживает, но и на плюс пока не тянет.
13. Роман Осадченко (cleaner_it) 20.08.10 10:33
(8) Да, я тоже провел аналогию с V8unpack - не дотягивает пока. Зато идея мне нравится.
PS: Самая сильная вещь за последнее время, мне кажется - GUI клиент к 1С на Java с использованием J1C:)
14. 1 1 (dglucas_) 24.08.10 12:38
Собственно говоря, можно было бы попробовать "порасплетать" метаданные и более вдумчиво, благо, предложенная идея вполне это позволяет сделать. Просьба дать ссылки на любые ресурсы, где описано, как устроена конфигурация восьмерки "изнутри". То есть, как устроенные эти дивные файлы ( или записи :D ) с фигурными скобками.
16. 1 1 (dglucas_) 25.08.10 14:50
Спасибо, обязательно посмотрю.
17. Роман Осадченко (cleaner_it) 30.08.10 06:12
(14) http://infostart.ru/public/19734/ (правда, для файловых БД, но что-то общее по-любому будет)
19. DrZombi DrZombi (DrZombi) 11.12.14 10:21
Присоединюсь... Статья ни о чем ОТСОЙ
20. Михаил Беляев (METAL) 22.06.16 12:23
dglucas_, спасибо большое, очень интересно!

Но воспользоваться не получается.

Тестовый скрипт Test.sql возвращает пустую таблицу.
Скрипт
SEL ECT * FROM [mybase].[dbo].[fn_GetBinary] (
(Select TOP 1 BinaryData Fr om Config)) k
также возвращает пустую таблицу... :(

Возможно неправильно подключил?

Скрипты подключения во вложении (один вспомогательный просто разрешает выполнение CLR)
Прикрепленные файлы:
Разрешение исполнения CLR.sql
Подключение внешнего метода к SQL.sql
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа