Книга знаний

1С:Предприятие / v8

v8: Хранилище значения

Сохранение и восстановление данных в Хранилище значений.Автор статьи: Волшебник | Редакторы:
Последняя редакция №3 от 23.01.06 | История
URL: http://kb.mista.ru/article.php?id=72

Хранилище значений - это тип, который появился в 8.0, позволяющий сохранять прямо в базе различные данные, включая двоичные данные (произвольные файлы). Например, так можно хранить в базе данных JPG-картинки, Word-документы и т.д. Причем данные будут храниться в самой базе (файле 1CD или в таблицах на SQL-сервере) и будут включены в штатную выгрузку базы или резервную копию средствами SQL Server.

Тип Хранилище значения может быть назначен реквизиту справочника, документа, ресурсу регистра сведений и т.д.

В хранилище значение можно сохранить почти любую информацию, например,

...табличный документ:

Процедура СохранитьВХранилищеНажатие(Элемент)
    ТабДок=Новый ТабличныйДокумент;    
    ТабДок.Вывести(ЭлементыФормы.ПолеТабличногоДокумента1);
    Хранилище=Новый ХранилищеЗначения(ТабДок);
    Записать();
КонецПроцедуры

Процедура ВосстановитьИзХранилищаНажатие(Элемент)
    ТабДок=Хранилище.Получить();
    Если ТабДок<>Неопределено Тогда
        ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ТабДок);
    КонецЕсли;
КонецПроцедуры


... картинки (фотки):

ТекИзображение.Объект = СпрТкани.Ссылка;
ТекИзображение.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
Хранилище = Новый ХранилищеЗначения(НоваяКартинка, Новый СжатиеДанных());
ТекИзображение.Хранилище = Хранилище.Получить();

// в этом месте он все выводит ...
ЭлементыФормы.ПолеКартинки1.Картинка = Хранилище.Получить();
ТекИзображение.Записать();


... произвольные файлы (двоичные данные):

ХЗ = Новый ХранилищеЗначения(Новый ДвоичныеДанные(файл));


Восьмерка поддерживает сжатие данных, помещаемых в хранилище:
ХЗ = Новый ХранилищеЗначения(Новый ДвоичныеДанные(файл),Новый СжатиеДанных(9));


Если это были ДвоичныеДанные, то их можно восстановить из хранилища значения методом Получить и записать в файл методом Записать().

Если ТипЗнч(Хранилище) <> Тип("ДвоичныеДанные") Тогда
    ДвоичныеДанные = Хранилище.Получить();
Иначе
    ДвоичныеДанные = Хранилище;
КонецЕсли; 
ДвоичныеДанные.Записать(ИмяФайла);


Если это был, например, Word-документ (doc-файл, или другой файл зарегистрированного типа), то его можно открыть так:

ЗапуститьПриложение(ИмяФайла);

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика