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
.rar 4,29Kb
04.09.14
70
.rar 4,29Kb 70 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Андрей Д. (detec) 122 19.08.10 18:28 Сейчас в теме
Просьба развёрнуто пояснить: что подразумевается под работой с метаданными?
2. Евгений (wirg) 19.08.10 18:34 Сейчас в теме
Ничего не понятно из описания.
3. 1 1 (dglucas_) 12 19.08.10 18:54 Сейчас в теме
Под "работой с метаданными" в контексте данной темы следует понимать извлечение любых данных, содержащихся в конкретной конфигурации 1С (только для MS SQL). :D
4. Роман Осадченко (cleaner_it) 208 19.08.10 18:57 Сейчас в теме
Не понятна цель изложенных в (0) действий. Картинок нет, описания развертки проекта нет...
5. Роман Осадченко (cleaner_it) 208 19.08.10 18:59 Сейчас в теме
(3) - то есть можно просмотреть пользовательские данные 1С? Список элементов справочника/документа/регистра?
6. 1 1 (dglucas_) 12 19.08.10 19:13 Сейчас в теме
Да. Описание развертки проектов для создания clr-функций можно найти в хелпе Майкрософт. Оно стандартное, без особенностей для конкретной ситуации. :D
7. Сергей Троицкий (tsd) 147 19.08.10 19:20 Сейчас в теме
(6) ага, но здесь не настоящие программисты ;) , и половине народа (мне в том числе) не понятно в чем фишка.
А нафига все это надо? И в чем собственно говоря идея, демонстрацию которой Вы делаете? С метаданными я и так могу работать (в локальной базе через сом и т.п.).
8. Герман (German) 921 19.08.10 21:54 Сейчас в теме
:!: :!: :!: :!: :!:
Сильно. Автору респект.
Минусы и нытье в комментах непонятно.
ИМХО. Это самая сильная вещь на ИС за последние 2 года с момента опубликования V8unpack
9. Валерий Агеев (awa) 2353 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) 921 20.08.10 08:36 Сейчас в теме
(9) пример бессмысленный, но я считаю полезной именно саму технологию распаковки.
идею можно развить в действительно полезные вещи.
11. 1 1 (dglucas_) 12 20.08.10 09:14 Сейчас в теме
Согласен с German. Я ведь и писал именно про демонстрацию идеи и ее оценку хотел получить (для начала).Что же касается ''реального извлечения", то до него уже не так уж далеко. Собственно, модифицирована функция, и примеры. Просто я не очень понимаю, как это добавить сюда.

Что касается мутности описания, оно действительно рассчитано на людей, которые знают про clr и проблему с sqlbinary в 1cv8. ;)
12. Валерий Агеев (awa) 2353 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) 208 20.08.10 10:33 Сейчас в теме
(8) Да, я тоже провел аналогию с V8unpack - не дотягивает пока. Зато идея мне нравится.
PS: Самая сильная вещь за последнее время, мне кажется - GUI клиент к 1С на Java с использованием J1C:)
14. 1 1 (dglucas_) 12 24.08.10 12:38 Сейчас в теме
Собственно говоря, можно было бы попробовать "порасплетать" метаданные и более вдумчиво, благо, предложенная идея вполне это позволяет сделать. Просьба дать ссылки на любые ресурсы, где описано, как устроена конфигурация восьмерки "изнутри". То есть, как устроенные эти дивные файлы ( или записи :D ) с фигурными скобками.
15. Герман (German) 921 25.08.10 13:01 Сейчас в теме
16. 1 1 (dglucas_) 12 25.08.10 14:50 Сейчас в теме
Спасибо, обязательно посмотрю.
17. Роман Осадченко (cleaner_it) 208 30.08.10 06:12 Сейчас в теме
(14) http://infostart.ru/public/19734/ (правда, для файловых БД, но что-то общее по-любому будет)
19. DrZombi DrZombi (DrZombi) 11.12.14 10:21 Сейчас в теме
Присоединюсь... Статья ни о чем ОТСОЙ
20. Михаил Беляев (METAL) 74 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