Имя: Пароль:
1C
1С v8
Сложные печатные формы
0 MistaEr
 
02.11.23
11:14
Добрый день! Заказчик предоставляет шаблоны печатных форм в формате ворд. Через макет mxl, посчитали слишком сложно реализовать. Так и сделали, создаем Новый COMОбъект("Word.Application"), заменяем параметры, удаляем ненужные закладки и строки таблиц, выводим картинки. Работает не быстро. Какие еще есть варианты разработки сложных печатных форм, прошу поделиться.
1 Волшебник
 
02.11.23
11:16
MXL побыстрее будет, сделайте над собой усилие
2 vicof
 
02.11.23
11:18
Для начала посмотреть, что именно небыстро.
3 PLUT
 
02.11.23
11:35
(0) убыстрить можно, если не использовать COMОбъект

а работать напрямую с XML шаблона печатных форм в формате ворд

ДД 		= РеквизитФормыВЗначение("Объект").ПолучитьМакет(ИмяМакета);
	Чтение 	= Новый ЧтениеДанных(ДД);
	БуферДД	= Чтение.ПрочитатьВБуферДвоичныхДанных();
	Поток	= Новый ПотокВПамяти(БуферДД);
	
	Каталог = КаталогВременныхФайлов() + "ШляпаКакаято";
	СоздатьКаталог(Каталог);

ЗИП 	= Новый ЧтениеZipФайла(Поток);
	ЗИП.ИзвлечьВсе(Каталог, РежимВосстановленияПутейФайловZIP.Восстанавливать);
	ЗИП.Закрыть();
	Поток.Закрыть();
	Чтение.Закрыть();
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьФайл(Каталог + "\word\document.xml");
	
	Построитель = Новый ПостроительDOM;
	Док		= Построитель.Прочитать(ЧтениеXML);
	ЧтениеXML.Закрыть();

	Разыменователь = Новый РазыменовательПространствИменDOM(Док);
			
	ВыражениеXPath	= Док.СоздатьВыражениеXPath(...

...тут какие-то магические заклинания 1С по замене параметров, удалению ненужных закладок и строк таблиц и выводу картинки...

//Сохранение результата
	ЗаписьDOM = Новый ЗаписьDOM; 
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(Каталог + "\word\document.xml"); 
	ЗаписьDOM.Записать(Док, ЗаписьXML); 
	ЗаписьXML.Закрыть();
	
	Поток = Новый ПотокВПамяти();
	
	ЗаписьZIP = Новый ЗаписьZipФайла(Поток,,,МетодСжатияZIP.Сжатие);                                  
	ЗаписьZIP.Добавить(Каталог + "\*.*", РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); 
	ЗаписьZIP.Записать();
	
	ДД = Поток.ЗакрытьИПолучитьДвоичныеДанные();
	
	АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ДД, УникальныйИдентификатор);

УдалитьФайлы(Каталог);
4 arsik
 
02.11.23
11:39
(3) В БСП есть примеры внешних печатных форм в ворде. Там все просто
5 d4rkmesa
 
02.11.23
11:47
(0) ActiveDocument, в типовых есть примеры.
6 PLUT
 
02.11.23
11:48
(4) просто, но не быстро :)

например, шаблон на 30 страниц с туевой хучей параметров для замены выводится на печать минут 10...

после магии из (3) - примерно секунд 10
7 Волшебник
 
02.11.23
11:50
(3) 🔥 Решение — огонь!
8 PLUT
 
02.11.23
15:43
(7) мопед не мой, но оказался полезным

не помню, чем вдохновлялся, возможно это оно:

https://infostart.ru/1c/articles/590918/
9 d4rkmesa
 
02.11.23
11:53
(0) "Через макет mxl, посчитали слишком сложно реализовать"

Если в макетах данные идут построчно, то реализовать можно в табличный документ, я встречал не так часто формы, которые особенно муторно рисовать.
10 arsik
 
02.11.23
11:57
Через форматированный документ еще можно
11 Масянька
 
02.11.23
12:03
(6) 10 секунд так уж много (для 30 страниц). Хотят красоты - пусть ждут.
12 Масянька
 
02.11.23
12:04
(9) А выделение жирным (например) одного слова (параметра) в строке - как в mxl?
13 Donkey_hot
 
02.11.23
12:07
(12) Вроде обещали с 23-й платформы... Сам не проверял.
14 PLUT
 
02.11.23
12:07
(11) а 10 минут что-то не хотят ждать

"ваша программа не работает!"
15 PLUT
 
02.11.23
12:10
(14) ну можно котиков вывести как вариант, чтобы нескучно было
16 MistaEr
 
02.11.23
12:24
(3) Спасибо, будем изучать)
17 Gucci76
 
02.11.23
13:10
Как правило первая печатная форма в ВОРДе делается долго, но следующая в разы быстрее формируется
18 d4rkmesa
 
02.11.23
13:16
(12) На новой платформе через форматированную строку, но могут быть нюансы. )
19 Федя Тяпкин
 
02.11.23
15:36
(3) спасибо. утащил в закладки.
20 PLUT
 
02.11.23
15:43
(19) на здоровье

недостающая магия
https://infostart.ru/1c/articles/590918/