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

17 Comments

  1. detec

    Просьба развёрнуто пояснить: что подразумевается под работой с метаданными?

    Reply
  2. wirg

    Ничего не понятно из описания.

    Reply
  3. dglucas_

    Под «работой с метаданными» в контексте данной темы следует понимать извлечение любых данных, содержащихся в конкретной конфигурации 1С (только для MS SQL). 😀

    Reply
  4. cleaner_it

    Не понятна цель изложенных в (0) действий. Картинок нет, описания развертки проекта нет…

    Reply
  5. cleaner_it

    (3) — то есть можно просмотреть пользовательские данные 1С? Список элементов справочника/документа/регистра?

    Reply
  6. dglucas_

    Да. Описание развертки проектов для создания clr-функций можно найти в хелпе Майкрософт. Оно стандартное, без особенностей для конкретной ситуации. 😀

    Reply
  7. German

    ❗ ❗ ❗ ❗ ❗

    Сильно. Автору респект.

    Минусы и нытье в комментах непонятно.

    ИМХО. Это самая сильная вещь на ИС за последние 2 года с момента опубликования V8unpack

    Reply
  8. awa

    (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С» еще очень далеко.

    А минусы, как я понимаю, за совершенно невнятное описание, что же на самом деле выложено.

    Reply
  9. German

    (9) пример бессмысленный, но я считаю полезной именно саму технологию распаковки.

    идею можно развить в действительно полезные вещи.

    Reply
  10. dglucas_

    Согласен с German. Я ведь и писал именно про демонстрацию идеи и ее оценку хотел получить (для начала).Что же касается »реального извлечения», то до него уже не так уж далеко. Собственно, модифицирована функция, и примеры. Просто я не очень понимаю, как это добавить сюда.

    Что касается мутности описания, оно действительно рассчитано на людей, которые знают про clr и проблему с sqlbinary в 1cv8. 😉

    Reply
  11. awa

    (10) Какая технология? Вся технология заключается в распаковке двоичных данных (deflate). Двоичные данные упакованы zip-ом и хранятся как поток без заголовка. Это давным давно всем известно, точно также потоки упакованы в cf. Т.е. вся технология, представленная в этой публикации заключается в строке

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

    То же самое делает zlib1.dll, который используется в v8unpack. То же самое я делаю в Tool_1CD c помощью библиотеки Abbrevia. Нет в этой публикации ничего нового.

    Минусов, конечно, автор не заслуживает, но и на плюс пока не тянет.

    Reply
  12. cleaner_it

    (8) Да, я тоже провел аналогию с V8unpack — не дотягивает пока. Зато идея мне нравится.

    PS: Самая сильная вещь за последнее время, мне кажется — GUI клиент к 1С на Java с использованием J1C🙂

    Reply
  13. dglucas_

    Собственно говоря, можно было бы попробовать «порасплетать» метаданные и более вдумчиво, благо, предложенная идея вполне это позволяет сделать. Просьба дать ссылки на любые ресурсы, где описано, как устроена конфигурация восьмерки «изнутри». То есть, как устроенные эти дивные файлы ( или записи 😀 ) с фигурными скобками.

    Reply
  14. German

    (14)Ei 😉

    Reply
  15. dglucas_

    Спасибо, обязательно посмотрю.

    Reply
  16. cleaner_it

    (14) http://infostart.ru/public/19734/ (правда, для файловых БД, но что-то общее по-любому будет)

    Reply
  17. METAL

    dglucas_, спасибо большое, очень интересно!

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

    Тестовый скрипт Test.sql возвращает пустую таблицу.

    Скрипт

    SEL ECT * FROM [mybase].[dbo].[fn_GetBinary] (

    (Select TOP 1 BinaryData Fr om Config)) k

    также возвращает пустую таблицу… 🙁

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

    Скрипты подключения во вложении (один вспомогательный просто разрешает выполнение CLR)

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *