1С: Получить хранилище значения из двоичных данных SQL

1. blandinko 23.01.25 19:19 Сейчас в теме
Добрый день.
Работаю с "Внешними источниками данных", подключила таблицу из внешней БД SQL, где хранятся устаревшие версии объектов (Регистр сведений "ВерсииОбъектов" из ДО).
Задача - реализовать восстановление версий обратно в регистр в рабочей БД 1С.
Проблема с реквизитом "ВерсияОбъекта", которая в регистре ДО хранится как хранилище значения (где хранится структура, в которой XML-данные в файле в бинарном формате FastInfoset), а в SQL - как двоичные данные (varbinary(max)).

Как преобразовать двоичные данные из SQL обратно в хранилище значения?
По теме из базы знаний
Найденные решения
6. user1936660 24.01.25 10:28 Сейчас в теме
ВИД -> ДвоичныеДанные -> XML сериализация с типом ДвоичныеДанные -> XML десериализация с типом ХранилищеЗначений -> ХранилищеЗначений -> Твоя структура
blandinko; +1 Ответить
10. user1936660 24.01.25 11:46 Сейчас в теме
(9)
Функция

ХранилищеЗначения = XMLЗначение(Тип("ХранилищеЗначения"), ПолучитьBase64СтрокуИзДвоичныхДанных(ДвоичныеДанные));
blandinko; +1 Ответить
9. blandinko 24.01.25 11:30 Сейчас в теме
(8) Спасибо огромное!

Функция ПолучитьХранилищеЗначенияИзДвоичныхДанных(ДвДанные)
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    ЗаписатьXML(ЗаписьXML, ДвДанные);
    МояСериализация = ЗаписьXML.Закрыть();

    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(МояСериализация);
    ХранилищеЗначения = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("ХранилищеЗначения"));

    Возврат ХранилищеЗначения;

КонецФункции
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. miniogn 44 23.01.25 21:18 Сейчас в теме
Попробовать, если про это спрашивается
щ = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных());
3. blandinko 23.01.25 22:03 Сейчас в теме
(2)
Пробовала, не взлетает. В регистр записывается, но версию объекта невозможно восстановить, т.к. команда Получить() возвращает собственно те же двоичные данные из SQL, которые были туда помещены. А должна возвращаться структура.
4. SAShikutkin 15 24.01.25 10:18 Сейчас в теме
(3) А так ПолучитьСтрокуИзДвоичныхДанных. Т.е. ДвоичныеДанные -> XML
5. blandinko 24.01.25 10:23 Сейчас в теме
(4) в хранилище значения не XML, а структура, в которой два элемента - двоичные данные, содержащие XML, и массив
6. user1936660 24.01.25 10:28 Сейчас в теме
ВИД -> ДвоичныеДанные -> XML сериализация с типом ДвоичныеДанные -> XML десериализация с типом ХранилищеЗначений -> ХранилищеЗначений -> Твоя структура
blandinko; +1 Ответить
7. blandinko 24.01.25 10:34 Сейчас в теме
(6) Расшифруйте, пожалуйста, не поняла, как и где это делается, на стороне 1С?
8. user1936660 24.01.25 10:38 Сейчас в теме
9. blandinko 24.01.25 11:30 Сейчас в теме
(8) Спасибо огромное!

Функция ПолучитьХранилищеЗначенияИзДвоичныхДанных(ДвДанные)
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    ЗаписатьXML(ЗаписьXML, ДвДанные);
    МояСериализация = ЗаписьXML.Закрыть();

    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(МояСериализация);
    ХранилищеЗначения = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("ХранилищеЗначения"));

    Возврат ХранилищеЗначения;

КонецФункции
Показать
10. user1936660 24.01.25 11:46 Сейчас в теме
(9)
Функция

ХранилищеЗначения = XMLЗначение(Тип("ХранилищеЗначения"), ПолучитьBase64СтрокуИзДвоичныхДанных(ДвоичныеДанные));
blandinko; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот