(24) Самое узкое место в выводе отчета с картинками это передача его обратно с сервера на клиента, При передаче платформа сериализует табличный документ и передает таким образом в разы больше информации , чем нужно. А на клиенте съедаются в это время Гигабайты.дискового постранства. У меня при выводе отчета продаж за месяц отчет вообще падал с ошибкой формата потока. Нашел следующий выход:
Если отчет не в типовом решении, то в обработку на сервер не надо передавать табличный документ.
При окончании обработки на сервере созданный табличный документ помещается во временной хранилище. Адрес временного хранилища можно задать или в реквизите формы или передать с клиента. А на клиенте уже из временного хранилища создается табличный документ. Что-то типа следующего:
Код |
---|
&НаКлиенте
Процедура Сформировать(Команда)
Адрес = "";
СформироватьОтчетНаСервере(Адрес, Период);
ТабДок = ПолучитьИзВременногоХранилища(Адрес);
ТабДок.Показать();
КонецПроцедуры
&НаСервере
Процедура СформироватьОтчетНаСервере(Адрес, Период);
ТабДок = Новый ТабличныйДокумент;
ОбъектОтчет = РеквизитФормыВЗначение("Отчет");
ОбъектОтчет.СформироватьОтчет(ТабДок, Период);
Адрес = ПоместитьВоВременноеХранилище(ТабДок,ЭтаФорма.УникальныйИдентификатор);
КонецПроцедуры
|
Если про типовое решение, то в отчете по себестоимости и выручке продаж сделал так:
1) скопировал и создал из типового отчета свой отчет ОтчетПродажиСИзображением
2) Скопировал общую форму отчета и поместил ее в новый отчет
3) Выбрал форму отчета - новую форму отчета
4) в новой форме отчета добавил реквизит АдресН Тип строка неограниченной длины
5) в форме отчета в процедуре ФоновоеЗаданиеЗагрузитьРезультат закомментировал стандартную передачу результата табличного документа и добавил строку по помещению табличного документа во временное хранилище
Код |
---|
//ОтчетТабличныйДокумент = РезультатФормирования.ТабличныйДокумент;
АдресН = ПоместитьВоВременноеХранилище(РезультатФормирования.ТабличныйДокумент,ЭтаФорма.УникальныйИдентификатор);
|
6) в процедуре ПослеФормирванияНаКлиенте добавил строку в начале процедуры
Код |
---|
ОтчетТабличныйДокумент = ПолучитьИзВременногоХранилища(АдресН);
|
Отчет из полутора тысяч строк вводится за 3 минуты. Отчет за месяц, который ранее не выводился вообще, выводится менее 15 минут. Работает в фоне, при условии, что отчет в конфигурации, а не внешний. Все сделанные доработки тоже касаются варианта, что отчет встроенный. Если внешний, то возможно алгоритмы идут по другим веткам и потребуются доработки.