Распаковка хранилища значений средствами MS SQL Server

08.08.21

Разработка - Групповая разработка (Git, хранилище)

Способ извлечения данных из 1С-ного "ХранилищеЗначений" в MS SQL Server с помощью самописной скалярной функции (без использования платформы 1С).

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

Наименование Файл Версия Размер
Сборка
.dll 18,50Kb
9
.dll 1.0.0.0 18,50Kb 9 Скачать

В своей предыдущей публикации я продемонстрировал возможность создавать хранимые процедуры на языке C# для расширения возможностей MS SQL Server.

Сегодня я покажу, как можно подобным образом распаковать 1С-ное хранилище значений, используя только хранимые функции в SQL.

В приложении к данной публикации находится сборка (HZ.dll), которая содержит в себе алгоритм по распаковке бинарных данных с помощью своей скалярной функции MS SQL Server, получаемых в результате помещения данных в ХранилищеЗначения с помощью платформы 1С.


Настройка:

Создадим на скуле объект сборки в разделе "Программирование":

CREATE ASSEMBLY HZ FROM '<PATH_TO_ASSEMBLY>\HZ.dll'
WITH PERMISSION_SET=EXTERNAL_ACCESS
GO

Затем создадим нашу скалярную функцию:

CREATE FUNCTION UnpackVS(@binData varbinary(max)) RETURNS nvarchar(max)
AS EXTERNAL NAME HZ.ValueStorage.UnpackVS;
GO

Должно получиться подобно этому:


Подготовка тестовых данных:

Создадим в базе 1С, например, новый регистр сведений с одним измерением типа УникальныйИдентификатор и одним ресурсом типа ХранилищеЗначения:

Заполним его тестовой записью:


Проверка:

Найдем в SQL базе таблицу, соответствующую созданному регистру сведений и сделаем запрос:

Полный вид данных, полученных из хранилища значения:


P.S.1:

Алгоритм распаковки вытаскивает из хранилища значений только основной набор данных. После основных данных могут идти еще и дополнительные бинарные данные (вложения), например, картинки, вставленные в табличный документ. Удалось разобраться со структурой этих данных: после основного текста идёт 4-х байтовый индекс вложения, затем идут 8 байт длины тела вложения и тело вложения (по аналогии с основными данными), и т.д.


P.S.2:

Не используйте данную функцию к тысячам записей, т. к. это будет не быстро. Также SQL не сможет отобразить большие по размеру распакованные данные, для этого применяйте разбиение строки на подстроки с дальнейшей склейкой результатов на фронт-энде:

,SUBSTRING(dbo.UnpackVS(T.[_Fld9739]),     0, 40000) as HZ_part1
,SUBSTRING(dbo.UnpackVS(T.[_Fld9739]), 40000, 40000) as HZ_part2

Таким простым способом можно использовать самописные функции в SQL, расширяя его возможности.

ХранилищеЗначения хранимые процедуры функции скалярные SQL C#

См. также

Системы контроля версий для 1С-разработчиков.

1С-программирование DevOps и автоматизация разработки Групповая разработка (Git, хранилище) DevOps для 1С Платформа 1С v8.3 Платные (руб)

Основы командной разработки на 1С. Использование систем контроля версий при разработке на платформе 1С:Предприятие 8

4900 руб.

29.06.2022    9141    78    4    

110

Особенности национального Workflow: Github Actions и OneScript

Групповая разработка (Git, хранилище) OneScript Бесплатно (free)

Сегодня мы посмотрим на Github Actions - встроенный инструментарий Github для автоматизации рабочих процессов. Разберем, что это такое, зачем и причем тут OneScript.

25.03.2024    1172    bayselonarrend    3    

35

Автоматизация процесса разработки с помощью сервиса GitFlic

Групповая разработка (Git, хранилище) Бесплатно (free)

GitFlic – первая в России полностью самостоятельная реализация сервиса для хранения репозиториев с исходным кодом. За три года разработки сервис GitFlic стал полноценным инструментом, которым можно заменить GitLab, GitHub и BitBucket. Расскажем о том, как выстроить в GitFlic процесс автоматического тестирования, статического анализа кода и сборки приложений.

05.03.2024    1865    user1989937    6    

15

OpenYellow - рейтинг открытых GitHub репозиториев для платформы 1С:Предприятие

Групповая разработка (Git, хранилище) Бесплатно (free)

Обновляемый топ GitHub репозиториев для 1С по всем языкам программирования и еще немного рассуждений про open-source.

05.02.2024    3780    bayselonarrend    15    

61

Насколько глубок 1С-ный GitHub?

Групповая разработка (Git, хранилище) Бесплатно (free)

Open-source проекты - важная часть мира программного обеспечения. 1С привычно держится немного в стороне от глобальных трендов, но бросить холодный статистический взгляд на положение дел мне показалось небезынтересным.

22.01.2024    7841    bayselonarrend    50    

86

TCP прокси-сервер хранилища конфигурации 1С

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Платформа 1С v8.3 Бесплатно (free)

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    2772    kamisov    17    

57

Отдай корень! Библиотека OneScript для получения информации о захваченных объектах в хранилище

Групповая разработка (Git, хранилище) Бесплатно (free)

Хранилище конфигурации 1С - это инструмент групповой разработки. Работают с хранилищем следующим образом: захватывают какой-либо объект, редактируют, потом отдают его в хранилище. Хранилище помечает уже захваченные объекты и не дает возможности захватить их другим пользователям. Это рождает и самый большой недостаток хранилища - невозможность работы с одним объектом нескольких пользователей, например в случае доработки разных методов в одном большом модуле. Корень конфигурации - это самый верхний ее узел. Только захватив корень, мы можем добавить в конфигурацию новые общие модули, документы, справочники, регистры и подобное. Только захватив корень можно изменить настройки поддержки конфигурации. Соответственно, если корень захвачен одним программистом, другой программист не может добавить новые объекты или снять что-то с поддержки. Потому то и всплывает эта фраза - отдай корень, мне нужно тоже что-то добавить.

26.12.2023    1336    ardn    1    

26

Git Code Review - инструмент для рецензирования кода

Групповая разработка (Git, хранилище) Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Абонемент ($m)

Git Code Review - инструмент, позволяющий быстро анализировать изменения из git-репозитория прямо в 1С

1 стартмани

20.12.2023    3958    59    salexdv    26    

81
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. DrZombi 286 24.09.19 09:47 Сейчас в теме
где исходники?
вы с большей вероятностью могли вложить вирус в свою поделку... сир
2. SerVer1C 748 24.09.19 10:31 Сейчас в теме
(1)
могли вложить вирус в свою поделку
Не для этого пишу здесь )))
Вам и в платформе вирус могут подсунуть. Используйте средства защиты )
https://www.virustotal.com/gui/file/942da1ec360cee0a62df85fafc86f17fa340ccf9880d12e­617e88adc2c0453ba/detection
YaroslavHolovatiy; +1 3 Ответить
3. Darklight 32 24.09.19 16:31 Сейчас в теме
(2)(1)Согалсен, такие наработки лучше в исходниках выкладывать. Вряд ли у Вас там технологиченская тайна на миллион, хотя бы рублей. Да и, вовсе, не продаёте Вы данный инструмент. Зачем скрывать исходник? Он настолько объёмен и уникален, что Вам жалко им делиться?
5. SerVer1C 748 25.09.19 09:17 Сейчас в теме
(3) Кому очень нужно - тот свой алгоритм разработает. Для остальных - есть готовый продукт. Как посчитаю нужным выложить сорцы, так обязательно это сделаю.
12. пользователь 17.09.20 07:24
Сообщение было скрыто модератором.
...
13. пользователь 17.09.20 08:12
Сообщение было скрыто модератором.
...
4. Darklight 32 24.09.19 16:43 Сейчас в теме
А в чём смысл распаковывания именно на SQL хранилища значений? Алгоритмам (вне 1С), которым это надо проще распаковать их уже после получения из СУБД. Разве нет? Уж очень специфическая область применения распаковки на SQL - выходит. Тем более что в таком строковом представлении значения в формате сериализации в строку внутр 1С - тоже не особо кому интересно. На SQL более менее интересной может быть только распаковка значений, которые можно будет представить их в виде таблиц. Даже структуру можно было бы далее распаковать в датасет - конечно тут что-то нужно с вложенностью придумывать - но простейший случай - это распаковать в развёрнутом виде - где вложенные уровни хранятся в той же таблице - в других строках - а доступ к ним - классический - по ключу и левому соединению с самим собой.
Но структура внутри может содержать не только значения типа "Структура" - тут сразу нужно делать универсальное решение распаковки в таблицу для объектов (в т.ч. вложенных): "ТаблицаЗначений","ДеревоЗначений", "СписокЗначений", "Структура"(в т.ч. фиксированная), "Соответствие", "Массив". Примитивные типы (а так же УникальныйИдентификатор) тоже можно распаковать, и ссылочные типы -обязательно тоже надо распаковать - остальное - можно пока оставить как есть - вот тогда будет польза в SQL распаковке - тогда к такому датасету можно будет делать SQL запросы, в т.ч. соединять его с таблицами БД.
6. SerVer1C 748 25.09.19 09:19 Сейчас в теме
(4) Данный пример имеет больше академическую ценность, чем практическую. В статье уклон идет больше в сторону создания самописных функций в SQL.
7. Darklight 32 25.09.19 12:00 Сейчас в теме
(6)Вот лучше бы сделали что-то более практическое (и как раз более сложное) - чтобы как раз можно было бы именно использовать на практике, а не для изучения без исходников
8. SerVer1C 748 25.09.19 16:48 Сейчас в теме
(7) Следите за моими публикациями...
9. GreenDragon 01.10.19 15:50 Сейчас в теме
Сперва плюсанул, а потом глянул что автор ответил на вопрос про исходники. Нет уж, спасибо. И это на фоне некоей "академической ценности" публикации, как заверяет автор.
bds22; VVi3ard; +2 Ответить
10. SerVer1C 748 01.10.19 19:52 Сейчас в теме
(9) Я знаю другие "площадки", где можно распространять вирусы на очень широкую публику. Здесь ради 5-10 потенциальных скачиваний вообще не вижу смысла терять репутацию и никаких "плюшек" я от этого точно не получу.
11. GreenDragon 01.10.19 19:55 Сейчас в теме
(10) Так много букв, вместо обычного репозитория на github или bitbucket. В общем, удачи. Когда "посчитаете нужным выложить сорцы", они никому уже и даром не нужны будут.
Оставьте свое сообщение