Записки программиста 1с

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

Хранилище Значений 1с используется для хранения значений различных типов в сериализованном виде. Этот вид позволяет записывать данные и потом восстанавливать их. В документации по встроенному языку в описании объектов возможность сериализации указывается отметкой “Сериализуется”. 

Хранение происходит в самой базе данных или файле 1Cv8.1CD в случае файловой базы данных или в таблицах на SQL-сервере в случае серверной . Соответственно при выгрузки конфигурации, данные используемые хранилищем значений будут включены в архив базы (резервную копию). 

С помощью этого объекта можно хранить такие данные как:

  • файлы,
  • картинки (фотографии),
  • внешние обработки,
  • таблицы значений,
  • структуры…

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

Хранилище Значения 1с

Сам тип Хранилище Значения имеет только один Метод и один конструктор.

Информация о методах и конструкторах из Синтаксис-Помошника.

Хранилище ЗначенияМетод Хранилища Значения
Хранилище значения в Синтаксис-Помощнике

Большинство объектов, которые имеют неизменяемое значение, а также универсальные коллекции, могут быть помещены в ХранилищеЗначения. К значению, хранящемуся в объекте, нельзя обращаться, его можно только извлечь из хранилища.

Хранилище значений 1с может применяется для хранения таблицы значений.

Создадим Регистр сведений

Хранилище значений 1с
Регистр сведений

Регистр Сведений будет иметь следующие измерения и ресурсы.

хранилище значений 1с
Измерения и Ресурсы Регистра Сведений

Создадим Справочник Дни. Реквизиты Справочника:

  • КурсДня-тип Хранилище Значений
  • Дата -тип Дата
Хранилище значений 1с
Справочник с Реквизитом Типа Хранилище Значений.

На форме Элемента Справочника Дни разместим Кнопку. Код кнопки будет выполняться на Сервере и помещать Таблицу значений в Реквизит КурсДня.

Условно код можно разделить на три блока.

Во-первых блок извлекающий информацию из Регистра Сведений

Запрос=новый Запрос;
	Запрос.Текст="ВЫБРАТЬ
	             |	КурсыВалютСрезПоследних.Валюта КАК Валюта,
	             |	КурсыВалютСрезПоследних.Курс КАК Курс
	             |ИЗ
	             |	РегистрСведений.КурсыВалют.СрезПоследних(&Период, ) КАК КурсыВалютСрезПоследних";
	Запрос.УстановитьПараметр("Период",Дата(ТекущаяДата()));

Во-вторых блок записи результата запроса в таблицу значений.


ТЗ=запрос.Выполнить().Выгрузить();

В третьих блок записи информации из Хранилища Значения в Справочник Дни

День=справочники.Дни.СоздатьЭлемент();
	Хранилище=новый ХранилищеЗначения(ТЗ,новый СжатиеДанных(9));
	день.Дата=Дата(ТекущаяДата());
	День.КурсДня=Хранилище;
	День.Записать();

Для проверки правильности извлечения информации из Регистра Сведений можно использовать проверку, которую впоследствии закоментируем.

//проверка запроса
	//РЗ=запрос.Выполнить().Выбрать();
	//пока РЗ.Следующий() цикл
	//Сообщить("курс"+РЗ.Валюта+"  "+РЗ.Курс);	
	//конеццикла;

Полный код представлен ниже:

Хранилище значений 1с
Полный код

Для извлечения информации из Хранилища значений 1с создадим обработку.

Хранилище Значения
Внешняя обработка

В качестве Реквизита сделаем ссылку на наш Справочник Дни.

На форму обработки добавим Кнопку. Код процедуры кнопки следующий:

Хранилище значений 1с
Код процедуры извлечения информации из Хранилища значений

Ссылка на обработку(Ссылка). Код внешней обработки:

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

&НаКлиенте
Процедура Команда1(Команда)
	Команда1НаСервере();
КонецПроцедуры

Сохранение и восстановление данных Табличного документа в Хранилище значений.

Объект Табличный документ используется при проектировании Печатных форм. Передача данных выполняется с использованием Хранилища значений.

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *