Суть метода в том, что при работе в WEB-клиенте сохранение в Excel происходит на сервере, а потом файл передается клиенту через временное хранилище.
//***********************************************************************
&НаКлиенте
Процедура СохранитьВExcel(ТабличныйДокумент)
ИмяФайла = "Имя отчета" + " (" +
Строка(Формат(ТекущаяДата(),"ДФ=""дд-ММ-гггг""")) + ")"
+".xlsx";
#Если ВебКлиент Тогда
//Подключим расширение работы с файлами
Если Не ПодключитьРасширениеРаботыСФайлами() Тогда
УстановитьРасширениеРаботыСФайлами();
ПодключитьРасширениеРаботыСФайлами();
КонецЕсли;
#КонецЕсли
//Вызовем диалог сохранения файла
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ВыборФайла.Заголовок = "Укажите каталог и название файла для сохранения.";
ВыборФайла.ПолноеИмяФайла = ИмяФайла;
Если ВыборФайла.Выбрать() Тогда
#Если ВебКлиент Тогда
//Получим адрес временного хранилища с файлом или сообщение об ошибке
АдресХранилищаИлиОшибка = "";
Если СформироватьФайлОтчетаНаСервере(ТабличныйДокумент,ИмяФайла,АдресХранилищаИлиОшибка) Тогда
ПолучаемыеФайлы = Новый Массив;
ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла,АдресХранилищаИлиОшибка));
ПолученныеФайлы = Новый Массив;
//Получим файл
Если НЕ ПолучитьФайлы(ПолучаемыеФайлы, ПолученныеФайлы, ВыборФайла.Каталог, Ложь) Тогда
Сообщить("Ошибка передачи файла отчета с сервера.", СтатусСообщения.Важное);
Возврат;
КонецЕсли;
Иначе
Сообщить(АдресХранилищаИлиОшибка);
Возврат;
КонецЕсли;
#Иначе
//Сохраним файл
Попытка
Результат.Записать(ВыборФайла.ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLSX);
Исключение
Сообщить("Не удалось сохранить документ в файл " + ИмяФайла
+ Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Важное);
Возврат;
КонецПопытки;
#КонецЕсли
КонецЕсли;
КонецПроцедуры
//***********************************************************************
&НаСервере
Функция СформироватьФайлОтчетаНаСервере(ТабличныйДокумент, ИмяФайла, АдресХранилищаИлиОшибка="")
//Сформируем полное имя файла
ПолноеИмяФайла = КаталогВременныхФайлов() + ИмяФайла;
//Сохранение и передача файла
Попытка
//Запишем табличный документ в файл
ТабличныйДокумент.Записать(ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
//Вернем на клиент двоичные данные файла
АдресХранилищаИлиОшибка = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайла));
Возврат Истина;
Исключение
АдресХранилищаИлиОшибка = "Не удалось сохранить документ в файл " + ИмяФайла
+ Символы.ПС + ОписаниеОшибки();
Возврат Ложь;
КонецПопытки;
КонецФункции
Пример реализации данных процедур в отчете можно посмотреть здесь.