Доработанный прайс-лист с картинками для УТ10.3 КА УПП.
Если сохранять стандартными средствами 1С большой прайс-лист в xlsx -то размер файла будет очень большой за счет того, что в нем используются несжатые png файлы.
Данная обработка использует то, что все xlsx - по сути архивы. Используется подмена PNG на JPG с возможностью настройки сжатия. За счет этого размер выходного файла Excel можно регулировать вручную
Пример выгрузки из обработки и стандартными средствами 1С:
- из обработки 94 КБ
- стандартными средствами 1С 981 КБ
В обработке присутсвует возможность настройки параметров сжатия картинок с выбором качества и разрешения изображения, выбор пути по которому будет сохранен файл:
Используемый код выгрузки:
Если Не ЗначениеЗаполнено(ПутьСохранения) Тогда
Возврат
КонецЕсли;
//************** записаваем прайс лист в архив zip с xlsx ****************
Файл = ПутьСохранения+"ПрайсЛист от "+Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy")+".xlsx";
ЭлементыФормы.ДокументРезультат.Записать(Файл, ТипФайлаТабличногоДокумента.XLSX);
//************** разаархивируем полученный файл **********************
Темп = ПутьСохранения+"temp\";
ФайлАрхива = Новый ЧтениеZIPФайла(Файл);
ФайлАрхива.ИзвлечьВсе(Темп, РежимВосстановленияПутейФайловZIP.Восстанавливать);
ФайлАрхива.Закрыть();
//******************** удалим файл архива *****************************
УдалитьФайлы(Файл);
//********************** если есть папка картинок, то обработаем, иначе просто сохраним
ПапкаКартинок = Темп+"xl\media\";
КаталогНаДиске = Новый Файл(ПапкаКартинок);
Если КаталогНаДиске.Существует() Тогда
//************************ переписываем temp\xl\drawings\_rels\drawing1.xml.rels **********************
drawing1 = Новый ЧтениеТекста(Темп+"xl\drawings\_rels\drawing1.xml.rels");
ВесьФайлОднойСтрокой = drawing1.Прочитать();
ВесьФайлОднойСтрокой = СтрЗаменить(ВесьФайлОднойСтрокой,"png","jpg");
drawing1.Закрыть();
УдалитьФайлы(drawing1);
drawing1 = Новый ЗаписьТекста(Темп+"xl\drawings\_rels\drawing1.xml.rels", КодировкаТекста.ANSI);
drawing1.ЗаписатьСтроку(ВесьФайлОднойСтрокой);
drawing1.Закрыть();
//*********************** преобразуем изображения ********************************************************
Picture = Новый COMОбъект("GFLAx.GFLAx");
МассивНайденныхФайлов = НайтиФайлы(ПапкаКартинок, "*.*");
Для Каждого Картинка Из МассивНайденныхФайлов Цикл
Picture.LoadBitmap(Картинка.ПолноеИмя);
Picture.SaveJPEGQuality = Качество;
Picture.Xdpi=ЗначениеДПИ;
Picture.Ydpi=ЗначениеДПИ;
Picture.SaveFormat = 1;
УдалитьФайлы(Картинка.ПолноеИмя);
Picture.SaveBitmap(Картинка.ПолноеИмя);
КонецЦикла;
КонецЕсли;
//************** архивируем папку темп в архив zip с xlsx *********
ЗаписьZIP = Новый ЗаписьZipФайла(Файл);
ЗаписьZIP.Записать();
ЗаписьZIP.Открыть(Файл, , , , УровеньСжатияZIP.Максимальный,);
ЗаписьZIP.Добавить(Темп+"\*",РежимСохраненияПутейZIP.СохранятьОтносительныеПути,РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
ЗаписьZIP.Записать();
УдалитьФайлы(Темп);
Сообщить("Выгрузка "+Файл+" завершена!");
НЕ РАБОТАЕТ БЕЗ КОМПОНЕНТЫ GFLAX!
Не использует выгрузку Excel, ADO, OpenOffice.