Поделитесь в соцсетях

Временное хранилище в 1С 8.2

Содержание[Убрать]

Передача файла с клиента на сервер и обратно.

В связи с новым подходом в программировании на платформе 8.2 возникла необходимость передачи данных между клиентом и сервером при этом прямая передача в виде параметров имеет ряд ограничений. И тогда был введен объект «Временное хранилище».

Чем полезно временное хранилище:

  • Не надо создавать объекты в конфигурации
  • Доступно и с сервера и с клиента
  • Можно записать любой объект

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

Синтаксис работы с хранилищем простой:

Передав параметром, данные которые хотим поместить(Посылка) и УникальныйИдентификатор получаем Адрес, по которому потом можно будет обратиться. Причем передаваемый идентификатор не является получаемым в последствии адресом. Вместо идентификатора можно передать строку Адреса, по которому и будет помещено наше значение, но это не любая строка! Строка Адреса выглядит примерно вот так «e1cib/tempstorage/ae5c5472-0266-4892-9073-20392dd5a6a6».


УникальныйИдентификатор = Новый УникальныйИдентификатор;
Адрес = ПоместитьВоВременноеХранилище(Посылка, УникальныйИдентификатор);

УникальныйИдентификатор может быть как новый так и существующей формы, в последнем случае значение в хранилище будет храниться пока существует форма. Если не передать уникальный идентификатор, то при следующем серверном вызове значение уже будет удалено.


Адрес = ПоместитьВоВременноеХранилище(Посылка);
ПрочитатьНаСервере(Адрес); // процедура на сервере которая читает из хранилища с помощью метода ПолучитьИзВременногоХранилища()
ПрочитатьНаСервере(Адрес); // при этом вызове серверной процедуры значения в хранилище уже не будет.

Чтобы получить из хранилища нужно только указать адрес:


Посылка = ПолучитьИзВременногоХранилища(Адрес);

Также можно удалить помещенный объект, используя адрес


УдалитьИзВременногоХранилища(Адрес);

Если помещаемые данные не являются объектами конфигурации, то для того чтобы их поместить нужно перевести в доступный тип - «ДвоичныеДанные»

Помещение в хранилище


ДвоичДанные = Новый ДвоичныеДанные(ПутьКФайлу);
Адрес = ПоместитьВоВременноеХранилище(ДвоичДанные, УникальныйИдентификатор);

Здесь мы сначала преобразуем файл в формат двоичных данных и только потом помещаем их в хранилище

Чтение из хранилища

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


ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
ИмяВременногоФайлаXML = ПолучитьИмяВременногоФайла("xml"); // например был помещен XML
ДвоичныеДанные.Записать(ИмяВременногоФайлаXML);
ЧтениеXML = Новый ЧтениеXML; 
ЧтениеXML.ОткрытьФайл(ИмяВременногоФайлаXML);
ЧтениеXML.Прочитать();
// Дальше стандартная работа с XML

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


ПоместитьФайл(Адрес,,,Истина,ЭтаФорма.УникальныйИдентификатор);

В параметре Адрес, можно указать Адрес в который нужно записать файл, если нужен новый адрес, то нужно передать пустую строку.


Адрес = "";
ПоместитьФайл(Адрес,,,Истина,ЭтаФорма.УникальныйИдентификатор);

Истина – открывает окно для выбора папки и имени файла, при значении Истина есть возможность открыть файл."КопияФайла.xml" – Имя файла под которым будет сохранен файл.Адрес – это адрес в хранилище,ПолучитьФайл(Адрес,"Копияфайла.xml" , Истина);Чтобы сохранить файл из временного хранилища на Клиенте можно использовать метод

Для получения файла используется метод


ПолучитьФайл(Адрес,"Копияфайла.xml" , Истина);