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

Публикация № 1125887

Разработка - Практика программирования

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

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

В своей предыдущей публикации я продемонстрировал возможность создавать хранимые процедуры на языке 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:

Алгоритм распаковки вытаскивает из хранилища значений только основной набор данных. После основных данных могут идти еще и бинарные данные, например, картинки, вставленные в табличный документ, который запаковывается в ХранилищеЗначения. Но пока не разобрался со структурой данного формата.


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, расширяя его возможности.

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

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

Специальные предложения

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

См. также

Расширяем возможности MS SQL Server с помощью хранимых процедур CLR

Инструменты и обработки Программист Архив с данными MS SQL Абонемент ($m) Практика программирования Разработка

Не хватает какого-то функционала на скуле для обработки данных? Тогда он (новый функционал) идет к вам.

1 стартмани

02.09.2019    5035    SerVer1C    9       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Упражнения на Перфоленте. Парсим технологический журнал 1С

Статья Системный администратор Программист Архив с данными Windows Абонемент ($m) Сервисные утилиты Инструментарий разработчика Практика программирования Разработка

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

1 стартмани

31.07.2019    4750    Perfolenta    62       

В 1000 раз быстрее

Статья Программист Архив с данными ИТ-компания Windows Абонемент ($m) Практика программирования Разработка

Реализация алгоритма трассировки лучей на новом языке программирования "Перфолента"

1 стартмани

24.07.2019    3332    vasvl123    6       

Базовый курс по разработке мобильных 1C-приложений для Android-устройств. Третий поток. Онлайн-интенсив с 11 февраля по 05 марта 2020 г. Промо

Данный онлайн-курс предусматривает изучение базовых принципов создания приложений для операционной системы Android, работающих на мобильной платформе “1С:Предприятие”. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие” при разработке прикладных решений для “обычных” компьютеров, но пока ещё не занимался разработкой 1С-приложений, предназначенных для работы на мобильных устройствах.

7500 рублей

Перфолента, первое знакомство. Новый язык программирования

Инструменты и обработки Программист Приложение (exe) Windows Абонемент ($m) Практика программирования Инструментарий разработчика

Первое знакомство с новым языком программирования Перфолента. В статье описано назначение языка, причины его появления, основные характеристики и возможные варианты использования.

22.07.2019    16280    110    Perfolenta    165       

Вам нравятся запросы в 1С?

Инструменты и обработки Программист Конфигурация (md, cf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования Разработка

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    12712    1    m-rv    79       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Безопасная работа с транзакциями во встроенном языке

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования

Разбираемся с опасностями использования транзакций во встроенном языке 1С. Познаем ошибку "В данной транзакции уже происходили ошибки". Учимся защищаться от них.

1 стартмани

25.03.2019    19774    8    tormozit    44       

Настраиваемое мобильное приложение для сканирования штрихкодов

Инструменты и обработки Программист Приложение (apk) Android Абонемент ($m) Практика программирования Сканер штрих-кода Мобильная разработка

Обзор приложения для сканирования штрихкодов с возможностью обработки результата сканирования произвольным кодом для совместного использования с Android приложениями через Intent и взаимодействие с 1С конфигурациями через web-сервис.

1 стартмани

14.01.2019    4827    2    inord777    5       

PgConf.Russia 2020. 3-5 февраля 2020 г. Москва. Промо

PGConf.Russia – международная техническая конференция по открытой СУБД PostgreSQL, ежегодно собирающая более 700 разработчиков, администраторов баз данных и IT-менеджеров для обмена опытом и профессионального общения. Для участников сообщества infostart.ru скидка 5% на участие в конференции.

от 12350 рублей

Разработка внешних компонент на ассемблере goAsm

Статья Программист Архив с данными Windows Абонемент ($m) Практика программирования

Создание внешней компоненты по технологии Com "с нуля", используя ассемблер goAsm.

1 стартмани

26.11.2018    8455    6    chessman    40       

Работа с публикациями "Инфостарт"

Инструменты и обработки Программист Архив с данными v8 УУ Абонемент ($m) Практика программирования О сообществе WEB

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    11813    12    RocKeR_13    16       

Онлайн-курс «Практические аспекты внедрения регламентированного учета и расчета себестоимости в 1С:ERP на крупных промышленных предприятиях» с 17 февраля по 13 марта 2020 года. Промо

Курс рассчитан для подготовки экспертов по регламентированному учету и учету затрат для внедрения на крупных промышленных предприятиях с «исторически сложившимся» учетом

9000 рублей

Создаем объекты для модуля Bootstarp на Русском Фоксе

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования

Создавайте свой модуль с объектами для модуля Bootstrap, пакуйте их fxp-файлы и создавайте сайты из этих кубиков. Разберем, как это делать. Все гениальное должно быть простым, как теория относительности.

1 стартмани

19.08.2018    4444    andreosh    2       

РусскийФокс и BootStrap

Инструменты и обработки Программист Архив с данными Россия Абонемент ($m) Практика программирования

РусскийФокс вносит новый технологический подход в сайтостроение. Теперь вы можете ограничиться знанием Русского Фокса и не иметь знаний по HTML, CSS, JavaScript, PHP, чтоб создавать сайты.

1 стартмани

16.08.2018    4762    2    andreosh    18       

Сдача регламентированной отчетности из программ 1С Промо

Сдача регламентированной отчетности из программ "1С" во все контролирующие органы без выгрузок и загрузок в другие программы. Для групп компаний действуют специальные предложения.

от 1500 руб.

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции

Инструменты и обработки Программист Бизнес-аналитик Приложение (apk) v8 Windows Абонемент ($m) Инструментарий разработчика Практика программирования

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    18573    23    informa1555    26       

РусскийФокс. Изменение DBF-файла и назначение командных клавиш

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования Файловые протоколы обмена, FTP

- Шарапов, ты Русского Фокса знаешь ? - Конечно, Глеб. Я же программирую на Русском Фоксе. РусскийФокс (1C-подобный язык программирования) создает DBF-файлы и выгружает данные из DBF в XML.

1 стартмани

01.08.2018    4563    andreosh    2       

Открыто голосование за доклады на INFOSTART MEETUP Krasnodar Промо

Выбирайте и голосуйте за самые интересные доклады, лучшие из них попадут в окончательную программу митапа. Голосование продлится до 30 января 2020 года.

РусскийФокс. Создание DBF-файла, выгрузка в XML.

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . РусскийФокс создает DBF-файлы и выгружает данные из DBF в XML. Голосуйте за доклад о РусскийФокс на Инфостарт.

1 стартмани

28.07.2018    4266    2    andreosh    0       

РусскийФокс и ClickerMann заносят данные в 1С

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Сервисные утилиты Практика программирования

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . РусскийФокс создает сценарии для Clickermann. Сценарий заполняет справочник в 1С.

1 стартмани

21.07.2018    7584    1    andreosh    20       

Перенос документов, остатков и справочников КА 1.1 => КА 2 / УТ 11. Обновлено до КА 2.4.12.х и УТ 11.4.11.х! Промо

Более 130 компаний выполнили переход на КА 2 или УТ 11 с помощью нашей разработки! Позволяет перенести не только остатки и справочники (как типовая обработка), но и документы за нужный период времени. Предоставляем техподдержку, оперативно исправляем замечания, выпускаем обновления при выходе новых релизов программ 1С. Вы можете проверить разработку до покупки: сделаем бесплатный тестовый перенос из вашей базы КА 1.1 и предоставим доступ к базе-результату через веб-клиент!

29700 руб.

Работа с данными выбора

Инструменты и обработки Программист Архив с данными v8 Россия Абонемент ($m) Практика программирования Работа с интерфейсом

В управляемом интерфейсе заложена мощная возможность описывать связи реквизитов формы через параметры. Установка параметров связей позволяет ограничить выбор данных так, чтобы целостность данных была обеспечена на этапе ввода. Однако без дополнительного программирования задать можно только самые простые связи. Такие условия связи, как зависимость от реквизита через точку или зависимость через дополнительное отношение, заданное в регистре сведений - уже задать без программирования не получится.

1 стартмани

17.07.2018    27115    16    kalyaka    16       

РусскийФокс и OpenOffice, а также исследование объектов

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. . Взаимодействие с OpenOffice. GitHub https://github.com/UfaScript/RusFox

1 стартмани

12.07.2018    4662    1    andreosh    2       

Перенос данных УПП 1.3 => ERP 2 (ЕРП) / УТ 11 / КА 2.х (обработка переноса документов, остатков и справочников из "1С:Управление производственным предприятием, ред. 1.3" в ERP / УТ 11 / КА 2). Обновлен до УПП 1.3.130.х, КА 2.4.11.х и ERP 2.4.11.х! Промо

Обработка позволяет переносить из УПП 1.3 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления при выходе новых релизов конфигураций 1С.

29700 руб.

РусскийФокс. Настройка NotePad++, 1C-подобные функции и операторы и создание объектов

Статья Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. Создание объектов и настройка NotePad++. GitHub https://github.com/UfaScript/RusFox

1 стартмани

06.07.2018    8402    1    andreosh    12       

РусскийФокс — 1С-подобный язык программирования

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Практика программирования Математика и алгоритмы

Новый объектно-ориентированный русскоязычный 1С-подобный язык программирования РусскийФокс. Знакомство.

1 стартмани

03.07.2018    7420    1    andreosh    50       

1C:Предприятие для программистов: Запросы и отчеты. Второй поток. Онлайн-интенсив с 17 марта по 16 апреля 2020 г. Промо

Данный онлайн-курс предусматривает углубленное изучение языка запросов и возможностей системы компоновки данных, которые понадобятся при разработке отчетов, работающих на платформе “1С:Предприятие” в рамках различных прикладных решений. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей различных прикладных решений, которые используют в своей работе отчеты разного назначения.

6500 рублей

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар")

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    21928    86    m-rv    57       

БСП: Дополнительная обработка (Регламенты), примеры от простого к сложному

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования БСП (Библиотека стандартных подсистем)

Очень много попадается странных решений, которые можно решить через БСП:Дополнительные отчеты и обработки. Я бы вообще БСП из-за этой подсистемы переименовал в «Большое Спасибо Программистам». Поработаем с подсистемой в части написания регламентных заданий.

1 стартмани

10.05.2018    31933    30    dsdred    36       

Перенос данных КА 1.1 / УПП 1.3 => БП 3.0 (перенос остатков, документов и справочников из "1С:Комплексная автоматизация 1.1" / УПП 1.3 в "1С:Бухгалтерия 3.0"). Обновлен до версий КА 1.1.115.х, УПП 1.3.130.х! Промо

Разработка позволяет перенести остатки по всем счетам бух.учета в программу "1С:Бухгалтерия предприятия 8", ред. 3.0 на выбранную дату начала ведения учета. Также переносятся документы за период и вся необходимая справочная информация. Правила оперативно обновляю при выходе новых релизов. Рассылка обновлений правил бесплатно в течение 12 месяцев. Есть видеодемонстрация проведения переноса данных. Конфигурации при использовании обмена остаются полностью типовыми. Перенос данных возможен в Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую.

24700 руб.

Как выполнить отчет на СКД через COM и получить данные отчета?

Статья Программист Архив с данными v8 УПП1 Россия Windows Абонемент ($m) Практика программирования

Для чего это нужно. Например, нужно в одной базе получить какой-либо показатель из другой базы. Этот показатель вычисляется в каком-либо сложном отчете, который написан на СКД. Можно, конечно, "скопипастить" текст запроса из другой базы, немного подправить его и выполнять в том же COM подключении. Но с этим теряется гибкость: если отчет изменился, то нужно помнить о том, что где-то есть его "немного модифицированная" копия. В статье будет рассмотрен пример получения данных из базы ЗУП.

2 стартмани

08.05.2018    20041    10    wowik    3       

Работа со схемой запроса

Статья Программист Конфигурация (md, cf) v8 v8::Запросы Абонемент ($m) Инструментарий разработчика Практика программирования

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

1 стартмани

24.04.2018    32091    77    kalyaka    34       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Длинная арифметика (Bignum arithmetic) c COM-интерфейсом (ActiveX) на библиотеках MPIR

Инструменты и обработки Программист Архив с данными Россия Windows Абонемент ($m) Инструментарий разработчика Практика программирования

Расчеты любой точности в вашем программном продукте, поддерживающем стандарт COM. Размер/точность длинного числа зависит только от вашей оперативной памяти. Проект основан на исходниках библиотеки MPIR, Edition 3.0.0. Полностью написан на С/С++ (COM.DLL).

1 стартмани

12.04.2018    4585    1    bedvit    4       

Заполняем по шаблону (по умолчанию)

Инструменты и обработки Программист Архив с данными v8 v8::УФ 1cv8.cf Абонемент ($m) Практика программирования

Простой в подключении, универсальный и достаточно удобный механизм заполнения реквизитов произвольных документов/справочников значениями по умолчанию. Реализован в расширении, но может быть и непосредственно включен практически в любую конфигурацию на управляемых формах простым копированием одной формы и двух команд. Весь код в статье.

1 стартмани

08.02.2018    19742    20    mvxyz    17