Каталог решений - Печать в docx средствами БСП — оптимизация и ускорение

Печать в docx средствами БСП — оптимизация и ускорение

Печать в docx средствами БСП — оптимизация и ускорение

В наличии

Печать в docx средствами БСП — оптимизация и ускорение, с использованием функции ИнициализироватьМакетОфисногоДокумента один раз для первого формирования структуры документа.

Категория:

Описание

В БСП есть функционал для формирования документа word (docx) без использования com объекта.

Подробно об этом написано здесь Печать в docx методами БСП без COM объекта

При формировании печатных форм на функцию ИнициализироватьМакетОфисногоДокумента приходится большой процент времени (в шаблонах заказчика занимало 60-70% времени выполнения), функция разархивирует шаблон документа docx и чтением XML строит структуру данного шаблона, при каждой печати экземпляра (не при пакетной) эта функция выполняет одну и ту же работу. 

Вариант оптимизации: можно выполнить функцию один раз, а в макете хранить не шаблон DOCX, а результат этой функции — структуру данного документа.

1. Точка останова после выполнения функции "ИнициализироватьМакетОфисногоДокумента"

МакетДокументDOCX	 = ПолучитьМакет("ОченьВажныйДоговор");
Макет				 = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(МакетДокументDOCX, Неопределено, Неопределено);

Теперь в переменной "Макет" находится структура документа

Используя отладчик

ОбщегоНазначения.ЗначениеВСтрокуXML(Макет)

2. Получаем тест для макета "МакетСтруктура"

Используя отладчик находим каталог

МакетСтруктура.ИмяКаталога

3. Заходим в каталог, архивируем все файлы в ZIP-архив, получаем двоичные данные для макета "МакетРесурсы"

4. В обработке печати добавляем эти два макета (тип:ДвоичныеДанные)

5. В обработке печати вместо вызова УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента функция

Функция ИнициализироватьМакетОфисногоДокумента()
	
	ИмяВременногоФайлаСтруктура	 = ПолучитьИмяВременногоФайла("TXT");
	ДвоичныеДанныеСтруктура		 = ПолучитьМакет("МакетСтруктура");
	ДвоичныеДанныеСтруктура.Записать(ИмяВременногоФайлаСтруктура);
	ТекстовыйДокумент			 = Новый ТекстовыйДокумент;
	ТекстовыйДокумент.Прочитать(ИмяВременногоФайлаСтруктура);
	Макет						 = ОбщегоНазначения.ЗначениеИзСтрокиXML(ТекстовыйДокумент.ПолучитьТекст());
	
	ИмяВременногоКаталога		 = ФайловаяСистема.СоздатьВременныйКаталог();
	Макет.ИмяКаталога			 = ИмяВременногоКаталога;
	
	АдресФайлаСРесурсамиZIP		 = ИмяВременногоКаталога + "ДоговорЮЛРесурсы.ZIP";
	МакетРесурсы				 = ПолучитьМакет("МакетРесурсы");
	МакетРесурсы.Записать(АдресФайлаСРесурсамиZIP);
	ЧтениеZIP					 = Новый ЧтениеZipФайла(АдресФайлаСРесурсамиZIP);
	ЧтениеZIP.ИзвлечьВсе(ИмяВременногоКаталога, РежимВосстановленияПутейФайловZIP.Восстанавливать);
	УдалитьФайлы(АдресФайлаСРесурсамиZIP);
	
	Возврат Макет;
	
КонецФункции

После этого сам шаблон документа DOCX в обработке печати не нужен. До оптимизации в среднем на формирование файла DOCX уходило 45 секунд, после оптимизации 15 секунд. Результатом максимально доволен, так как при отладке приходилось каждый раз ждать по минуте =)

И, приложенная к статье обработка, она делает первые три пункта, по указанному документу Word в каталоге создает два файла для двоичных данных макета.

Всем спасибо!

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