Метод же, используемый во всех найденный публикациях "Результат.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX)", не работает при большом числе строк.
Публикация http://infostart.ru/public/77128/ натолкнула на простую идею, которую и реализовал.
используется следующий простой метод.
1. Сначала сохраняем табличное поле как файл формата «Документ HTML4» (//infostart.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 = Истина;
А я тоже в свое время пришла к такому же решению
Я по-моему только через mlx
(4) bulpi,
У Экселя такого ограничения давно нет, а вот 1С все время ругается на число строк при попытке сохранить в любой формат Экселя (хоть 97 хоть 2007).
Супер! Была недавно такая проблема — пришлось отчет формировать поквартально вместо ежегодного…
Знал бы тогда о такой методике — было бы проще.
(4) bulpi, это для «старого» экселя, с расширением xls.
В 2007 экселе (расширение xlsx) на листе допускается 1 048 576 строк и 16 384 столбца.
«типовая 1с ругается при превышении их числа в 65535»
Не понял. Это ограничение не 1с , а листа Excel. И как же тебе удалось это обойти ? Сохраняй хоть откуда, но на лист больше не влезет.
(6) Позвольте не согласиться, коллега. Только что сохранил табличный документ в Excel 2007.
Платформа 8.2.14.540
(7) ediks,
Возможно где-то типовое сохранение и работает. Все варианты не тестировал.
У меня на отчете в 15 колонок и 300000 строк при выполнении команды «Сохранить как…» вылетает по нехватке памяти.
При обработке команды «Результат.Записать(ПутьКФайлу,ТипФайлаТабличногоДокумента.XLSX)» ругается на число строк (причем поминает Excel 97 при этом). Платформа (8.3.4.465)
И только конвертация через HTML4 отрабатывает нормально. А поскольку сам я в итоге потратил на поиск решения пару дней и энное количество танцев с бубном, решил другим облегчить жизнь.
(9) FractonKireyev,
http://www.rondebruin.nl/mac/mac020.htm
Это решение проблемы обязательно возьму на заметку. Идея заслуживает внимания.
В описанной методике я не понял одного — что значит строка кода:
Что значит число 51? Подскажите, кто знает.
Хотел уточнить, а конфа «1С:Предприятие — Работа с файлами», тоже не справляется? Всегда ей пользовался для сохранения в эксель файлов *.mxl. Файлы по 100 000 строк нормально сохранялись, больше не пробовал. Помню какой геморой был в 77, когда это конфа вышла, думал вопрос с сохранением решен, кто пробовал отпишитесь об ограничениях, если они там есть.
(11) Just,
Да нормально она сохраняет, но хотелось напрямую из отчета. Плюс — проблема с памятью при больших отчетах.
Я например вчера специально стал проверять, и как нарочно, ни одной ошибки со стандартным сохранением из 1с (безо всяких конвертаций). А когда надо было сделать тоже самое срочно — работать не хотела.
В общем — чем больше под рукой будет разных вариантов, тем лучше.:)
жаль что не выгружает отчет с картинками, выдает ошибку в самой картинке:
не удается отобразить связанный. возможно., этот файл был перемещен, переименован или удален. убедитесь, что ссылка указывает на правильный файл и верное размещение.
старая статья, а для меня стала откровением 🙂 спасибо автору большое!