Задача
Необходимо организовать сохранение файлов web-клиенте(браузере) и тонком клиенте через web. Для наглядности будем решать более узкую задачу, будем организовывать сохранение табличного документа в MS Excel.
Решение
Для наглядности будем решать более узкую задачу, будем организовывать сохранение табличного документа в MS Excel.
- Создадим табличный документ с произвольным текстом;
- Если работа производится на web-клиенте, то попытаемся подключить расширение работы с файлами;
- Поместим табличный документ во временной хранилище как файл MS Excel;
- Для сохранение файла воспользуемся функцией ПолучитьФайл(), который получает файл и сохраняет его в локальную файловую систему.
В итоге имеем следующий код:
&НаСервере Функция ПоместитьТабличныйДокументВоВременноеХранилищеНаСервере(ТабличныйДокумент, Расширение, ТипФайла) АдресХранилища = Неопределено; ИмяФайла = ПолучитьИмяВременногоФайла(Расширение); Попытка ТабличныйДокумент.Записать(ИмяФайла, ТипФайла); АдресХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла)); Исключение ВызватьИсключение; КонецПопытки; Возврат АдресХранилища; КонецФункции &НаКлиенте Процедура СохранитьФайл(Команда) // Для примера создадим пустой табличный документ ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.Область("R1C1").Текст = "Файл сохраненный обработкой ""Пример работы сохранения фалов"""; #Если ВебКлиент Тогда // Попробуем подключить расширение работы с файлами РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); Если НЕ РасширениеПодключено Тогда // Расширение не установлено, пробуем установить УстановитьРасширениеРаботыСФайлами(); КонецЕсли; РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); Если Не РасширениеПодключено Тогда // Расширение не удалось установить, сообщаем об этом пользователю ПоказатьПредупреждение( , НСтр("ru = 'Для выполнения данной операции вам нужно установить расширение работы с файлами.'")); Возврат; КонецЕсли; #КонецЕсли // Поместим табличный документ во временной хранилище как файл MS Excel АдресХранилища = ПоместитьТабличныйДокументВоВременноеХранилищеНаСервере(ТабличныйДокумент, "xlsx", ТипФайлаТабличногоДокумента.XLSX); Если АдресХранилища = Неопределено Тогда ПоказатьПредупреждение( , НСтр("ru = 'Что-то пошло не так :('")); Возврат; КонецЕсли; ИмяФайла = "Сохраняемый файл.xlsx"; Попытка // Сам момент сохранения ПолучитьФайл(АдресХранилища, ИмяФайла, Истина); Исключение Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "ru='Не удалось записать файл. Возможно, недостаточно места на диске, диск защищен от записи или не подключено расширение для работы с файлами.'"; Сообщение.Сообщить(); КонецПопытки; КонецПроцедуры
При выполнении команды СохранитьФайл() получим диалог с вариантами сохранить или открыть получаемый файл
При выборе варианта «Открыть»
При выборе варианта «Сохранить»
Спасибо за статью! Пригодилось.
Алексей, рад что пригодилось!
Обратите внимание, что в статье используются методы УстановитьРасширениеРаботыСФайлами() и ПодключитьРасширениеРаботыСФайлами(), в настоящее время правильнее использовать НачатьУстановкуРасширенияРаботыСФайлами() и НачатьПодключениеРасширенияРаботыСФайлами().
По возможности поправлю статью)
Спасибо огромное!
Небольшое замечание:
Попытка
ТабличныйДокумент.Записать(ИмяФайла, ТипФайла);
АдресХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла));
Подправленная строка
АдресХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла), УникальныйИдентификатор);
Подправленная строка
Без этого исправления вылетала ошибка 400
Исключение
ВызватьИсключение;
КонецПопытки;
Здравствуйте. Есть вариант как сохранить файл с веб клиента без обращения к серверу? Есть файл опубликован на веб сервере по ссылке. Надо в 1с вызвать диалог выбора куда сохранить и сохранить файл на локальной машине не трогая сервер (файлы могут быть несколько гигабайт).
Спасибо, пригодилось в 2021 году