1С 8.3 Хранилище значений - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Хранилище значений

Данные > Примеры кода 1С > 1С 8.3 Хранилище значений
Реклама:
Хранилище значений в 1С 8.3 это объект, который позволяет хранить в сериализованном виде почти любые типы данных (включая двоичные). Хранение происходит в самой базе данных (файле 1Cv8.1CD или на SQL-сервере в таблицах). Соответственно при выгрузки конфигурации, данные используемые хранилищем значений будут включены в архив базы (резервную копию). С помощью этого объекта можно хранить такие данные как: файлы, картинки (фотографии), внешние обработки, таблицы значений, структуры... Важно понимать, что хранение данных в таком виде будет существенно замедлять работу базы данных. Поэтому данную технологию хранения рекомендуется использовать в крайних случаях, если отсутствует альтернатива решения для имеющейся задачи.
Сохранение в Хранилище Значений в 1С 8.3:
&НаСервере
Процедура СохранениеВХранилищеЗначений();

   
// *** 1.Пример (Таблица значений):
   
ЗначенияТЗ = Новый ТаблицаЗначений(); // Создание значения "ТЗ"

    // Вставка в хранилище значений
   
Хранилище_Зн = Новый ХранилищеЗначения(ЗначенияТЗ, Новый СжатиеДанных(9));// "9" - макс.степень сжатия

    // Сохранение значения в реквизит объекта конфигурации (тип: ХранилищеЗначения)
   
СправочникСтранаСсылка = Справочники.Страны.НайтиПоНаименованию("Испания");
   
СправочникСтранаСсылка.ХранилищеЗначения = Хранилище_Зн;
   
СправочникСтранаСсылка.Записать();

   
// *** 2.Пример (Табличный документ):
   
ЗначенияТабДок=Новый ТабличныйДокумент;
   
ЗначенияТабДок.Вывести(ЭлементыФормы.ПолеТабличногоДокумента1);
   
Хранилище_ТабДок=Новый ХранилищеЗначения(ЗначенияТабДок);

   
// *** 3.Пример (Структура):
   
ЗначенияСтр = Новый Структура(); // Создание значения "Структура"
   
ЗначенияСтр.Вставить("Код", "34");
   
ЗначенияСтр.Вставить("Наименование", "Испания");
   
ЗначенияСтр.Вставить("Описание", "Европейская страна, расположенная на Пиренейском полуострове");
   
ЗначенияСтр.Вставить("Население", 46600000);
   
// Вставка в хранилище значений
   
Хранилище_Стр = Новый ХранилищеЗначения(ЗначенияСтр, Новый СжатиеДанных(9));// "9" - макс.степень сжатия
   
ЗначениеВФайл("D:\import\", Хранилище_Стр); // Сохранение значения в файл

    // *** 4.Пример (Любой файл) :
   
ФайлДвоичныеДанные = Новый ДвоичныеДанные("D:\import\КлиентБанк_РБ.exe");
   
Хранилище_Файл = Новый ХранилищеЗначения(ФайлДвоичныеДанные, Новый СжатиеДанных(0));// "0" - без сжатия

    // *** 5.Пример (Файл картинка) :
   
ФайлФото = Новый Картинка("D:\import\ФотоСотрудника.png");
   
Хранилище_Фото = Новый ХранилищеЗначения(ФайлФото, Новый СжатиеДанных(5));// "5" - средн.степень сжатия

    // *** 6.Пример (Текстовый файл) :
   
ФайлТекст = Новый ЧтениеТекста("D:\import\Война_и_мир.txt");
   
ТекстИзФайла = ФайлТекст.Прочитать();
   
Хранилище_Текст = Новый ХранилищеЗначения(ТекстИзФайла, Новый СжатиеДанных(1));// "1" - мин.степень сжатия

    // *** 7.Пример (Отчет/обработка 1С) :
   
Хранилище_Epf = Новый ХранилищеЗначения(Новый ДвоичныеДанные("D:\import\Otchet_realizacija_2020.epf", СтепеньСжатия));

КонецПроцедуры
Восстановление из Хранилище Значений в 1С 8.3:
&НаСервере
Процедура ВосстановлениеИзХранилищеЗначений();

   
ИмяФайла = "D:\import\Война_и_мир.txt";

   
// Двоичные данные можно восстановить из хранилища значения методом Получить и записать в файл методом Записать()
   
Если ТипЗнч(РеквизитХранилище) = Тип("ДвоичныеДанные") Тогда

       
// Хранилище.Получить()<>Неопределено Тогда // Процедура извлекает данные из хранилища (требует времени)
        // Для больших объемов данных рекомендуется использовать доп.реквизит (Например: Булево) Содержит данные - Истина
       
ДанныеХранилища = РеквизитХранилище.Получить();
        Если
ДанныеХранилища = Неопределено Тогда
           
Сообщить("Ошибка получения данных из хранилища значений 1С");
        КонецЕсли;
       
ДанныеХранилища.Записать(ИмяФайла); // Записываем восстановленые данные в файл

        // Восстановление Табличного документа
       
ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ДанныеХранилища);

       
// Восстановление и запуск Отчета/обработки 1С
       
ИмяФайла_Epf = "D:\import\Otchet_realizacija_2020.epf";
       
ДвоичныеДанные = РеквизитХранилище.Получить();
       
ДвоичныеДанные.Записать(ИмяФайла_Epf);
       
Epf = ВнешниеОбработки.Создать(ИмяФайла_Epf);
       
Epf.ПолучитьФорму().Открыть();

    Иначе
       
ДанныеХранилища = РеквизитХранилище;
    КонецЕсли;

   
// Файлы зарегистрированного типа (doc, xls, pdf, jpg, txt, exe...)
   
ЗапуститьПриложение(ИмяФайла);

КонецПроцедуры
Очистка реквизита Хранилище Значений в 1С 8.3:
&НаКлиенте
Процедура ОчисткаРеквизитаХранилищеЗначений();

   
РеквизитХранилище = Неопределено;

КонецПроцедуры
Проверка значения Хранилище Значений в 1С 8.3:
&НаКлиенте
Процедура ПроверкаЗначенияХранилищеЗначений();

   
Значение = РеквизитХранилище.Получить();
    Если
Значение <> Неопределено Тогда
        Если
ТипЗнч(Значение) = Тип("Строка") Тогда
           
Сообщить("Это строка");
        ИначеЕсли
ТипЗнч(Значение) = Тип("Картинка") Тогда
           
Сообщить("Это фотография (картинка)");
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры
Готовые модели кода (шаблоны) с "Хранилище значений" 1С:
Поиск кода
0
комментарии
____________________
Copyright by 1Cnik.by©, «Программист 1С в г.Минске», 22.09.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому