Профессия — 1С

Рукопашный бой Карташ

Категории

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

рубрики: Платформа 8.3 | Дата: 13 Июль, 2018

Платформа 1С:Предприятия предоставляет массу возможностей для хранения данных всевозможных типов.




Но зачастую этих возможностей не хватает. И тогда нам на помощь приходит специальный объект — ХранилищеЗначения. Этот объект позволяет хранить в специальном формате как стандартные объекты 1С:Предприятия, например, таблица значений, так и нестандартные, для которых тип в платформе не предусмотрен. К нестандартным типам могут быть отнесены файлы. Так, например, с помощью хранилища значений в базе данных 1С можно хранить фотографии сотрудников, сканы документов, внешние обработки и т.д. Преимуществом здесь является то, что все эти объекты храняться в самой базе. Соответственно при развертывании новой базы из резервной копии все эти объекты также будут присутствовать в новой базе. С другой стороны если хранить в базе файлы большого размера это может значительно увеличить ее объем и отрицательно сказаться на работоспособности. Поэтому здесь необходимо соблюдать разумный баланс.




Рассмотрим работу с хранилищем значений на примере. Создадим в конфигураторе специальный справочник — назовем его ВнешниеОбъекты, а у справочника в свою очередь создадим реквизит Объект с типом ХранилищеЗначения
Реквизит с типом хранилище значений
И теперь мы можем создавать в этом справочнике элементы, а в реквизит Объект каждого элемента записывать файл.

Работа с хранилищем значений очень проста. Если мы заглянем в синтакс-помощник, то увидим, что у этого объекта всего лишь один метод и один конструктор.
Хранилище значений в синтакс-помощнике

А теперь для демонстрации напишем простейший код, который будет записывать файл в реквизит Объект ранее созданного элемента справочника, а затем читать этот файл из реквизита и записывать его на диск, но уже под другим именем.


&НаСервере
Процедура ЗагрузитьВыгрузитьФайл(ЭлементСправочника)

	ОбъектСправочника = ЭлементСправочника.ПолучитьОбъект();

	//Помещаем картинку в хранилище значений
	ЯрлыкЗагрузка = Новый Картинка("g:\musor\favicon.ico");
	ХранилищеЗагрузка = Новый ХранилищеЗначения(ЯрлыкЗагрузка);

	//Записываем элемент справочника
	ОбъектСправочника.Объект = ХранилищеЗагрузка;
	ОбъектСправочника.Записать();

	//Выгружаем картинку из хранилища значений в файл
	ИмяФайла = "g:\musor\favicon_1.ico";
	ЯрлыкВыгрузка = ОбъектСправочника.Объект.Получить();
	ЯрлыкВыгрузка.Записать(ИмяФайла);

КонецПроцедуры




И несколько пояснений к коду.

  • Объект помещается в хранилище непосредственно при создании хранилища с помощью конструктора.
  • Нельзя просто прочитать объект из хранилища просто обратившись к реквизиту справочника как мы всегда привыкли это делать с другими типами данных. Вместо этого нужно использовать метод Получить() хранилища значений.

Чтобы сохранять в хранилище другие типы файлов, отличные от картинок, можно использовать объект ДвоичныеДанные. Чисто теоретически в хранилище значений можно даже хранить элементы справочников, документы и т.д. Но на практике это не имеет никакого смысла. А вот использовать хранилище значений для хранения таблицы значений, дерева значений и других универсальных коллекций иногда можно.

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

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

   

2018г. Профессия — 1С. Обмен опытом по программированию в 1С