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