1с скд хранилище значений

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

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

Соответственно поля типа ХранилищеЗначения следует использовать только в тех случаях, когда это соответствует их назначению и технологическим особенностям.

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

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

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

Примеры по программированию в 1с 7.7, 8.1, 8.2

пятница, 21 февраля 2014 г.

Хранилище значений и управляемая форма

Передаем на сервер адрес временного хранилища файла, а на сервере, записываем в ТЧ объекта «Версии» в реквизит Файл (Хранилище значений).
Обязательно сделать так: Об.Записать(); //- без этого данные из реквизита файл теряются

&НаСервере
Функция ВерсииПередНачаломДобавленияНаСервере(ИмяФайла,Адрес)
Об = РеквизитФормыВЗначение(«Объект»);
Дв = ПолучитьИзВременногоХранилища(Адрес);
НовВерсии = Об.Версии.Добавить();
НовВерсии.ИмяФайла = ИмяФайла;
НовВерсии.Дата = ТекущаяДата();
НовВерсии.Файл = Новый ХранилищеЗначения(Дв,Новый СжатиеДанных(9));
Об.Записать(); //- без этого данные из реквизита файл теряются
ЗначениеВРеквизитФормы(Об, «Объект»);
КонецФункции

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

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

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

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

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

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

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

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

    Объект помещается в хранилище непосредственно при создании хранилища с помощью конструктора.

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

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

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: