До старта конференции

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

Программирование - Теория программирования

Идея была подсказана на этом сайте. 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
73
.rar 4,29Kb 73 Скачать

См. также

Комментарии
1. Андрей Д. (detec) 128 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) 212 19.08.10 18:57 Сейчас в теме
Не понятна цель изложенных в (0) действий. Картинок нет, описания развертки проекта нет...
5. Роман Осадченко (cleaner_it) 212 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) 933 19.08.10 21:54 Сейчас в теме
:!: :!: :!: :!: :!:
Сильно. Автору респект.
Минусы и нытье в комментах непонятно.
ИМХО. Это самая сильная вещь на ИС за последние 2 года с момента опубликования V8unpack
9. Валерий Агеев (awa) 2402 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) 933 20.08.10 08:36 Сейчас в теме
(9) пример бессмысленный, но я считаю полезной именно саму технологию распаковки.
идею можно развить в действительно полезные вещи.
11. 1 1 (dglucas_) 12 20.08.10 09:14 Сейчас в теме
Согласен с German. Я ведь и писал именно про демонстрацию идеи и ее оценку хотел получить (для начала).Что же касается ''реального извлечения", то до него уже не так уж далеко. Собственно, модифицирована функция, и примеры. Просто я не очень понимаю, как это добавить сюда.

Что касается мутности описания, оно действительно рассчитано на людей, которые знают про clr и проблему с sqlbinary в 1cv8. ;)
12. Валерий Агеев (awa) 2402 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) 212 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) 933 25.08.10 13:01 Сейчас в теме
16. 1 1 (dglucas_) 12 25.08.10 14:50 Сейчас в теме
Спасибо, обязательно посмотрю.
17. Роман Осадченко (cleaner_it) 212 30.08.10 06:12 Сейчас в теме
(14) http://infostart.ru/public/19734/ (правда, для файловых БД, но что-то общее по-любому будет)
19. DrZombi DrZombi (DrZombi) 11.12.14 10:21 Сейчас в теме
Присоединюсь... Статья ни о чем ОТСОЙ
20. Михаил Беляев (METAL) 77 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
Оставьте свое сообщение