АйТиБложик
&НаКлиенте
Процедура ЗагрузитьПечатнуюФорму(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = «»;
Текст = «ru = «»Табличный документ»»; en = «»Spreadsheet document»»»;
Фильтр = НСтр(Текст)+»(*.mxl)|*.mxl»;
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = «Выберите файл табличного документа»;
Если ДиалогОткрытияФайла.Выбрать() Тогда
ВыбраныйФайл = ДиалогОткрытияФайла.ПолноеИмяФайла;
АдресВременногоХранилища = «»;
ПоместитьФайл(АдресВременногоХранилища, ВыбраныйФайл, , Ложь, ЭтаФорма.УникальныйИдентификатор);
ПечатнаяФормаПрочитать(АдресВременногоХранилища);
КонецЕсли;
КонецПроцедуры
Подготавливаем диалог выбора файла и вызываем функцию ПоместитьФайл . После передаем выполнение кода на сервер вызовом процедуры ЗагрузитьПечатнуюФорму .
Создаем процедуру для вызова метода Прочитать, которая выполняется на сервере
&НаСервере
Процедура ПечатнаяФормаПрочитать(АдресВременногоХранилища)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(«mxl»);
ДвоичныеДанные.Записать(ИмяВременногоФайла);
ЭтаФорма.ПечатнаяФорма.Прочитать(ИмяВременногоФайла);
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
КонецПопытки;
КонецПроцедуры // ПечатнаяФормаПрочитать()
Как передать файл с клиента на сервер 1С 8.3
Процедура Загрузить является клиентской процедурой, которая вызывается при выполнении команды на клиентской стороне. Она вызывает метод НачатьПомещениеФайла, который запускает процесс загрузки файла на сервер.
При успешной загрузке файла на сервер, на стороне сервера вызывается процедура ЗагрузитьНаСервере. Она получает загруженный файл из временного хранилища, считывает его содержимое, выполняет необходимые обработки и сохраняет результаты.
Процедура ВыполнитьЗагрузку вызывается из процедуры Загрузить на клиентской стороне. Она используется для обработки результатов загрузки файла, которые были получены в процессе выполнения процедуры ЗагрузитьНаСервере. Эта процедура может выполнять дополнительные действия на клиентской стороне, например, отображать полученные данные в интерфейсе пользователя.
Нужен облачный сервер с доступом в конфигуратор 1С? Воспользуйтесь нашим решением: аренда сервера 1С. Возможно предоставление сервера для разработки 1С.
Передача файла с клиента на сервер
НачатьПомещениеФайла (< ОписаниеОповещенияОЗавершении >, < Адрес >, < ПомещаемыйФайл >, < Интерактивно >, < УникальныйИдентификаторФормы >, < ОписаниеОповещенияПередНачаломПомещенияФайла >)
Метод работает в асинхронном режиме. Возможны два варианта выбора файла для передачи на сервер:
- интерактивной режим, при котором пользователю будет выдан диалог выбора файла;
- неинтерактивный режим, при котором уже известен путь к требуемому файлу на компьютере клиента. Такое возможно, например, когда пользователь в отдельном поле ввода выбрал путь к обрабатываемому файлу. Такой сценарий описан в этой статье.
Параметр ОписаниеОповещенияОЗавершении содержит описание процедуры (тип ОписаниеОповещения), которая будет вызвана после завершения помещения файла во временное хранилище. Эта процедура должна иметь ключевое слово Экспорт и 4 параметра:
- Результат — для интерактивного режима возвращает результат работы пользователя с окном выбора файла. Истина — пользователь выбрал файл; Ложь — пользователь отказался от выбора;
- Адрес — адрес временного хранилища;
- ПомещаемыйФайл — путь к файлу;
- ДополнительныеПараметры — значение, указанное при создании объекта ОписаниеОповещения.
Следует обратить внимание на параметр УникальныйИдентификаторФормы. В него рекомендуется передавать идентификатор текущей формы для сохранения данных во временном хранилище между несколькими серверными вызовами. При закрытии формы данные из временного хранилища будут автоматически удалены.
Неинтерактивная передача файла на сервер
Рассмотрим пример неинтерактивной передачи файла на сервер, без вызова окна выбора файла:
&НаКлиенте
Процедура ЗагрузитьФайл ( Команда )ИмяФайлаДляОбработки = «C:\ДанныеДляЗагрузки.xml» ;
// Описание процедуры, которая будет вызвана помещения файла во временное хранилище
ОписаниеОповещения = Новый ОписаниеОповещения ( «ЗагрузитьФайлЗавершение» , ЭтотОбъект );
// Начало помещение файла из файловой системы во временное хранилище
НачатьПомещениеФайла ( ОписаниеОповещения , , ИмяФайлаДляОбработки , Ложь, УникальныйИдентификатор );КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьФайлЗавершение ( Результат , Адрес , ВыбранноеИмяФайла , ДополнительныеПараметры ) ЭкспортВыполнитьЗагрузкуНаСервере ( Адрес );
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗагрузкуНаСервере ( Адрес )// Получение данных из временного хранилища
Данные = ПолучитьИзВременногоХранилища ( Адрес );
// Получение имени временного файла
ИмяВременногоФайла = ПолучитьИмяВременногоФайла ( «xml» );
// Сохранение данных во временный файл
Данные.Записать ( ИмяВременногоФайла );// Обработка файла…
// Хорошим тоном будет удалить временный файл
ПопыткаУдалитьФайлы ( ИмяВременногоФайла );
Исключение
КонецПопытки;КонецПроцедуры
При интерактивном выборе файла дополнительно необходимо предусмотреть два момента:
- указать настройки диалога выбора файла (если требуется);
- проверять, что пользователь действительно выбрал файл.
Интерактивная передача файла на сервер
Рассмотрим, пример интерактивной передачи файла на сервер:
&НаКлиенте
Процедура ЗагрузитьФайлИнтерактивно ( Команда )// Описание процедуры, которая будет вызвана после закрытия окна выбора файла
ОписаниеОповещения = Новый ОписаниеОповещения ( «ЗагрузитьФайлЗавершение» , ЭтотОбъект );
// Описание диалога выбора файла
Диалог = Новый ДиалогВыбораФайла ( РежимДиалогаВыбораФайла . Открытие );
Диалог . Фильтр = НСтр ( «ru=’Файл XML (*.xml)|*.xml’» );
// Начало помещение файла из файловой системы во временное хранилище
НачатьПомещениеФайла ( ОписаниеОповещения , , Диалог , Истина, УникальныйИдентификатор );КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры ) Экспорт
// Файл выбран
ВыполнитьЗагрузкуНаСервере ( Адрес );
// Пользователь отказался от выбора файла
Сообщить ( «Файл не был выбран» );
Процедура ВыполнитьЗагрузкуНаСервере при интерактивном и неинтерактивном режимах одинаковая.
Передача файла на сервер средствами БСП
В конфигурациях со встроенной Библиотекой стандартных подсистем для передачи файлов с клиента на сервер можно использовать процедуры
ЗагрузитьФайл ( ОбработчикЗавершения , ПараметрыЗагрузки = Неопределено, ИмяФайла = «» , АдресВоВременномХранилище = «» ) Экспорт
ЗагрузитьФайлы ( ОбработчикЗавершения , ПараметрыЗагрузки = Неопределено, ЗагружаемыеФайлы = Неопределено) Экспорт
общего модуля ФайловаяСистемаКлиент или
ВыбратьИПередатьФайлНаСервер ( ОповещениеЗавершения , Знач ПараметрыДиалога = Неопределено, Знач ИдентификаторФормы = Неопределено) Экспорт
общего модуля ОбменДаннымиКлиент.
Пример интерактивной загрузки файла на сервер средствами БСП:
&НаКлиенте
Процедура ЗагрузитьФайлИнтерактивно ( Команда )ПараметрыДиалога = Новый Структура ;
ПараметрыДиалога . Вставить ( «Заголовок» , НСтр ( «ru = ‘Выберите файл XML’» ));
ПараметрыДиалога . Вставить ( «Фильтр» , НСтр ( «ru=’Файл XML (*.xml)|*.xml’» ));Оповещение = Новый ОписаниеОповещения ( «ЗагрузитьФайлЗавершение» , ЭтотОбъект );
ОбменДаннымиКлиент . ВыбратьИПередатьФайлНаСервер ( Оповещение , ПараметрыДиалога , УникальныйИдентификатор );КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьФайлЗавершение (Знач РезультатПомещенияФайлов , Знач ДополнительныеПараметры ) ЭкспортАдрес = РезультатПомещенияФайлов . Хранение ;
ТекстОшибки = РезультатПомещенияФайлов . ОписаниеОшибки ;
ИмяВыбранногоФайла = РезультатПомещенияФайлов . Имя ;Если ПустаяСтрока ( ТекстОшибки ) И ПустаяСтрока ( Адрес ) Тогда
ТекстОшибки = НСтр ( «ru = ‘Ошибка передачи файла на сервер’» );
КонецЕсли;
Если НЕ ПустаяСтрока ( ТекстОшибки ) Тогда
ОбщегоНазначенияКлиентСервер . СообщитьПользователю ( ТекстОшибки );
Возврат;КонецЕсли;
ВыполнитьЗагрузкуНаСервере ( Адрес );
КонецПроцедуры
Программирование 1С 8.х для начинающих
- Вы здесь:
- Временное хранилище в 1С 8.2
Общие вопросы
Временное хранилище в 1С 8.2
- Печать
Передача файла с клиента на сервер и обратно.
В связи с новым подходом в программировании на платформе 8.2 возникла необходимость передачи данных между клиентом и сервером при этом прямая передача в виде параметров имеет ряд ограничений. И тогда был введен объект «Временное хранилище».
Чем полезно временное хранилище:
- Не надо создавать объекты в конфигурации
- Доступно и с сервера и с клиента
- Можно записать любой объект
Временное хранилище это не объект конфигурации, а объект платформы поэтому для разработчика он выглядит как черный ящик. Можно туда положить что-то получив псевдоним(адрес) и получить из него что-то указав псевдоним(адрес). Но узнать что находится во временном хранилище и сколько нельзя. В ниже рассмотренных примерах помещение в хранилище происходит на клиенте, а чтение на сервере. Хотя можно передавать данные и в обратном направлении.
Синтаксис работы с хранилищем простой:
Передав параметром, данные которые хотим поместить(Посылка) и УникальныйИдентификатор получаем Адрес, по которому потом можно будет обратиться. Причем передаваемый идентификатор не является получаемым в последствии адресом. Вместо идентификатора можно передать строку Адреса, по которому и будет помещено наше значение, но это не любая строка! Строка Адреса выглядит примерно вот так «e1cib/tempstorage/ae5c5472-0266-4892-9073-20392dd5a6a6» .
УникальныйИдентификатор может быть как новый так и существующей формы, в последнем случае значение в хранилище будет храниться пока существует форма. Если не передать уникальный идентификатор, то при следующем серверном вызове значение уже будет удалено.
Чтобы получить из хранилища нужно только указать адрес:
Также можно удалить помещенный объект, используя адрес
Если помещаемые данные не являются объектами конфигурации, то для того чтобы их поместить нужно перевести в доступный тип — «ДвоичныеДанные»
Помещение в хранилище
Здесь мы сначала преобразуем файл в формат двоичных данных и только потом помещаем их в хранилище
Чтение из хранилища
В интернете есть множество примеров как на сервере записать полученные данные в базу, поэтому ниже приводится другой пример, когда файл полученный на сервере открывается для работы. В качестве такого файла используется XML.
Если мы имеем дело с файлами, то может оказаться удобным метод ПоместитьФайл. Он преобразует файл в двоичные данные и записывает их во ВременноеХранилище. При этом параметром можно настроить открытие диалогового окна для выбора файла. Сделаю оговорку, этот метод нельзя использовать на сервере.
В параметре Адрес, можно указать Адрес в который нужно записать файл, если нужен новый адрес, то нужно передать пустую строку.
Истина – открывает окно для выбора папки и имени файла, при значении Истина есть возможность открыть файл.»КопияФайла.xml» – Имя файла под которым будет сохранен файл.Адрес – это адрес в хранилище,ПолучитьФайл(Адрес,»Копияфайла.xml» , Истина);Чтобы сохранить файл из временного хранилища на Клиенте можно использовать метод