Каталог решений - Простой способ программного сохранения больших отчетов из СКД в формат Excel

Простой способ программного сохранения больших отчетов из СКД в формат Excel

Простой способ программного сохранения больших отчетов из СКД в формат Excel

В наличии

Перерыв весь интернет не смог найти простого способа сохранить отчет с большим числом строк в формате Excel. Везде предлагалось писать процедуры построчной записи, ADO, COMSafeArray и прочее.
Метод же, используемый во всех найденный публикациях "Результат.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX)", не работает при большом числе строк.
Публикация http://infostart.ru/public/77128/ натолкнула на простую идею, которую и реализовал.

Категория:

Описание

Для того чтобы сохранить результат любого отчета (главное чтобы результат выводился в ТабличноеПоле) в формате Excel с большим числом строк (типовая 1с ругается при превышении их числа в 65535),
используется следующий простой метод.

1. Сначала сохраняем табличное поле как файл формата «Документ HTML4» (//sale.itcity.ru/public/77128/).
2. Полученный файл программно открываем и пересохраняем в нужном формате Excel.

Для реализации — в реквизиты формы отчета добавляем «ПутьКФайлу» — тип строка, к которому добавим функцию «ПутьКФайлуНачалоВыбора»

&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	РежимДиалога = РежимДиалогаВыбораФайла.Сохранение;
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога);
	ДиалогВыбораФайла.МножественныйВыбор = Ложь;
	ДиалогВыбораФайла.Заголовок = "Укажите путь выгрузки файла...";
	ДиалогВыбораФайла.ПолноеИмяФайла = ПутьКФайлу;
	ДиалогВыбораФайла.Фильтр = "Excel(2007)(*.xlsx)|*.xlsx";
	Если ДиалогВыбораФайла.Выбрать() Тогда
		ПутьКФайлу = ДиалогВыбораФайла.ПолноеИмяФайла;
	КонецЕсли;
	
КонецПроцедуры

Также на форму выводим кнопку «ФормаКнопкаСохранитьВЭксель», с командой «СохранитьВЭксель»

&НаКлиенте
Процедура СохранитьВЭксель(Команда)
	
ИмяФайлаHTML4 = СтрЗаменить(ПутьКФайлу,"xlsx","htm");
    Результат.Записать(ИмяФайлаHTML4,ТипФайлаТабличногоДокумента.HTML4);
	
	Попытка			
		ЭксельОбъект = Новый COMОбъект("Excel.Application");
		ЭксельОбъект.Application.Visible = Ложь;
		Книга = ЭксельОбъект.Application.Workbooks.Open(ИмяФайлаHTML4);			
		Книга.Windows(1).Visible = Истина;	
		Книга.Application.DisplayAlerts = False;
		Книга.SaveAs(ПутьКФайлу,51);			
		Книга.Close();	
		ЭксельОбъект.Application.Quit();
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат;
	КонецПопытки;	
	
КонецПроцедуры

Дополнительно.
Для того чтобы не было потери информации (особенно в части чисел), рекомендуется использовать в 1С, при выводе числовых показателей, следующий формат сумм:
ЧЦ=15; ЧДЦ=2; ЧРД=,; ЧГ=0

P.S. Исправлена строчка кода (приводила к невозможности в некоторых случаях увидеть полученный результат), новая строка выглядит так: 

Книга.Windows(1).Visible = Истина;

has been added to your cart:
Оформление заказа