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

Aug 17, 2022 15:19

Хранилище значений в 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С
Рекомендации по изучению программирования 1С с нуля
Игра "Кто хочет стать миллионером?" с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, ни­дер­ландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С
Программирование в 1С 8.3 с нуля - краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

программирование

Previous post Next post
Up