Хранилище Значений 1с используется для хранения значений различных типов в сериализованном виде. Этот вид позволяет записывать данные и потом восстанавливать их. В документации по встроенному языку в описании объектов возможность сериализации указывается отметкой “Сериализуется”.
Хранение происходит в самой базе данных или файле 1Cv8.1CD в случае файловой базы данных или в таблицах на SQL-сервере в случае серверной . Соответственно при выгрузки конфигурации, данные используемые хранилищем значений будут включены в архив базы (резервную копию).
С помощью этого объекта можно хранить такие данные как:
- файлы,
- картинки (фотографии),
- внешние обработки,
- таблицы значений,
- структуры…
Важно понимать, что хранение данных в таком виде будет существенно замедлять работу базы данных.
Хранилище Значения 1с
Сам тип Хранилище Значения имеет только один Метод и один конструктор.
Информация о методах и конструкторах из Синтаксис-Помошника.
Большинство объектов, которые имеют неизменяемое значение, а также универсальные коллекции, могут быть помещены в ХранилищеЗначения. К значению, хранящемуся в объекте, нельзя обращаться, его можно только извлечь из хранилища.
Хранилище значений 1с может применяется для хранения таблицы значений.
Создадим Регистр сведений
Регистр Сведений будет иметь следующие измерения и ресурсы.
Создадим Справочник Дни. Реквизиты Справочника:
- КурсДня-тип Хранилище Значений
- Дата -тип Дата
На форме Элемента Справочника Дни разместим Кнопку. Код кнопки будет выполняться на Сервере и помещать Таблицу значений в Реквизит КурсДня.
Условно код можно разделить на три блока.
Во-первых блок извлекающий информацию из Регистра Сведений
Запрос=новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| КурсыВалютСрезПоследних.Валюта КАК Валюта,
| КурсыВалютСрезПоследних.Курс КАК Курс
|ИЗ
| РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних";
Запрос.УстановитьПараметр("Период",Дата(ТекущаяДата()));
Во-вторых блок записи результата запроса в таблицу значений.
ТЗ=запрос.Выполнить().Выгрузить();
В третьих блок записи информации из Хранилища Значения в Справочник Дни
День=справочники.Дни.СоздатьЭлемент();
Хранилище=новый ХранилищеЗначения(ТЗ,новый СжатиеДанных(9));
день.Дата=Дата(ТекущаяДата());
День.КурсДня=Хранилище;
День.Записать();
Для проверки правильности извлечения информации из Регистра Сведений можно использовать проверку, которую впоследствии закоментируем.
//проверка запроса
//РЗ=запрос.Выполнить().Выбрать();
//пока РЗ.Следующий() цикл
//Сообщить("курс"+РЗ.Валюта+" "+РЗ.Курс);
//конеццикла;
Полный код представлен ниже:
Для извлечения информации из Хранилища значений 1с создадим обработку.
В качестве Реквизита сделаем ссылку на наш Справочник Дни.
На форму обработки добавим Кнопку. Код процедуры кнопки следующий:
Ссылка на обработку(Ссылка). Код внешней обработки:
&НаСервере
Процедура Команда1НаСервере()
Тз=новый ТаблицаЗначений;
Хранилище=новый ХранилищеЗначения(ТЗ,новый СжатиеДанных(9));
Хранилище=объект.Объект.КурсДня.Получить();
для каждого строка из Хранилище цикл
сообщить(Строка.Курс);
сообщить(Строка.Валюта);
конеццикла;
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
Сохранение и восстановление данных Табличного документа в Хранилище значений.
Объект Табличный документ используется при проектировании Печатных форм. Передача данных выполняется с использованием Хранилища значений.
//Табличный документ:
Процедура СохранитьВХранилищеНажатие(Элемент)
ТабДок=Новый ТабличныйДокумент;
ТабДок.Вывести(ЭлементыФормы.ПолеТабличногоДокумента1);
Хранилище=Новый ХранилищеЗначения(ТабДок);
Записать();
КонецПроцедуры
Процедура ВосстановитьИзХранилищаНажатие(Элемент)
ТабДок=Хранилище.Получить();
Если ТабДок<>Неопределено Тогда
ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ТабДок);
КонецЕсли;
КонецПроцедуры
доброго времени.
хочу сделать заказ.
Александр