Выгрузить табличную часть в Excel
Задача: выгрузить табличную часть формы в файл формата XLSX. К сожалению на прямую это не сделать, но зато мы можем воспользоваться функционалом компонента ПостроительОтчета, который в свою очередь понимает на входе таблицу значений. В итоге нам остаётся лишь выгрузить табличную часть в таблицу значений, которую в свою оочередь скормить построителю отчетов. На выходе будет ТабличныйДокумент, который уже штатно может сохраняться в т.ч. и в формат xlsx. Код получается примерно такой::
&НаСервере
Функция ЭкспортВExcelНаСервере()
ТабДок = Новый ТабличныйДокумент;
Тз = Новый ТаблицаЗначений;
тз.Колонки.Добавить("Отделение");
тз.Колонки.Добавить("Подразделение");
тз.Колонки.Добавить("ЛС");
тз.Колонки.Добавить("КодСопоставления");
тз.Колонки.Добавить("ДатаРождения");
тз.Колонки.Добавить("МестоРождения");
тз.Колонки.Добавить("СерияПаспорта");
тз.Колонки.Добавить("НомерПаспорта");
тз.Колонки.Добавить("СерияНомерПаспорта");
тз.Колонки.Добавить("РезультатПроверки");
для каждого стр из объект.РезультатСопоставления цикл
нс=тз.Добавить();
нс.Отделение=стр.Отделение;
нс.Подразделение=стр.Подразделение;
нс.ЛС=стр.ЛС;
нс.КодСопоставления=стр.КодСопоставления;
нс.ДатаРождения=стр.ДатаРождения;
нс.МестоРождения=стр.МестоРождения;
нс.СерияПаспорта=стр.СерияПаспортаС;
нс.НомерПаспорта=стр.НомерПаспортаС;
нс.СерияНомерПаспорта=стр.СерияНомерПаспорта;
нс.РезультатПроверки=стр.РезультатПроверки;
конеццикла;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Тз);
Построитель.Выполнить();
Построитель.Вывести(ТабДок);
ИмяВременногоФайлаХар = ПолучитьИмяВременногоФайла(".xlsx");
ТабДок.Записать(ИмяВременногоФайлаХар,ТипФайлаТабличногоДокумента.XLSX);
сообщить(ИмяВременногоФайлаХар);
Двоичное=Новый ДвоичныеДанные(ИмяВременногоФайлаХар);
Адрес=ПоместитьВоВременноеХранилище(Двоичное,ЭтаФорма.УникальныйИдентификатор);
Возврат Адрес;
КонецФункции
&НаКлиенте
Процедура ЭкспортВExcel(Команда)
Адрес=ЭкспортВExcelНаСервере();
Описание=Новый ОписаниеПередаваемогоФайла(ПолучитьИмяВременногоФайла(".xlsx"),Адрес);
МассивОписаний=Новый Массив;
МассивОписаний.Добавить(Описание);
ПолучитьФайлы(МассивОписаний,,,Ложь);
Для Каждого фф Из МассивОписаний Цикл
ЗапуститьПриложение(фф.Имя);
КонецЦикла;
КонецПроцедуры
Пользователь нажимает кнопку «Экспорт в эксель», на сервере формируется файл и передаётся на клиент. На клиенте он открывается приложением по умолчанию для данного формата файла. Код получился кросс платформенный, что в наше время очень актуально.