Имя: Пароль:
1C
 
Очень долгое заполнение таблицы шаблона Word (клиент-сервер)
0 kubik_live
 
17.04.26
18:28
Коллеги, доброго дня.

Проблема:
Формирую ВПФ с заполнением шаблона MS Word.

В файловой версии - практически сразу заполняется таблица в Word и макет выводится.
В клиент-серверной: (в зависимости от числа строк для заполнения таблицы > 10..15 приходится ждать до 40 мин.. (67 строк = 32 минуты ждал), если до 5..10 - достаточно быстро.

Вот код:

&НаКлиенте
Процедура Печать_ПриказОПремировании(СтруктураДок)  
    
    Word = Новый COMОбъект("Word.Application");

    ИмяМакета="ЗаРезультатыГодовая";  
    
    Макет = ПолучитьМакетСервер(ИмяМакета);
// макет в формате ДД
    ИмяФайла_Макет = ПолучитьИмяВременногоФайла("docx");
    Макет.Записать(ИмяФайла_Макет);
    ДокументWord = Word.Documents.ADD(ИмяФайла_Макет);
    ДокументWord.Activate();  
    
    СоздатьИЗаполнитьТЗПодстановок_ПриказОПремировании(СтруктураДок);  
    
    Для Каждого СтрТЗ Из Объект.ПромТЗ Цикл
        ПоискИЗаменаВWord_НаКлиенте(ДокументWord,СтрТЗ.Шаблон,СтрТЗ.СтрокаЗначения);        
    КонецЦикла;      
    
    Таб = ДокументWord.Tables.Item(2);
    
    Для Сч = 1 По Объект.ПромТЗТаблица.Количество() Цикл
        Таб.Rows.Add(Таб.Rows(2));
    КонецЦикла;  
    
    Строка=2;
    
    Для Каждого СтрТЗ Из Объект.ПромТЗТаблица Цикл
        
        ДанныеСтроки=СтрТЗ;
        

//ВОТ ТУТ НАЧИНАЮТСЯ ТОРМОЗА В КЛИЕНТ-СЕРВЕРНОЙ ВЕРСИИ....
// --->
            Таб.Cell(Строка,1).Range().InsertAfter(СтрТЗ.Подразделение);
            Таб.Cell(Строка,2).Range().InsertAfter(СтрТЗ.Сотрудник);  
            Таб.Cell(Строка,3).Range().InsertAfter(СтрТЗ.Должность);
            Таб.Cell(Строка,4).Range().InsertAfter(СтрТЗ.Премия);

// <----        
        Строка = Строка + 1;  
        
    КонецЦикла;
    
    Таб.Rows(Строка).Delete();
    
    Word.Visible = Истина;
    Word.Application.WindowState  = 2;//свернуть
    Word.Application.WindowState  = 1;//развернуть    
    Word.Activate();  
    
КонецПроцедуры    

Что можно сделать для решения проблемы?
1 timurhv
 
17.04.26
18:30
2026 год, Word через Com? Вот решение, работать будет махом.

https://infostart.ru/1c/articles/2155772/
2 timurhv
 
17.04.26
18:34
Это вы ссылки вставляете в Word или там строковые типы?
СтрТЗ.Подразделение
СтрТЗ.Сотрудник
СтрТЗ.Должность
3 kubik_live
 
17.04.26
18:36
(2) строковые
4 kubik_live
 
17.04.26
18:40
(1) Не могу понять: что тут так разнится по времени заполнения в файловой и клиент-серверной?
Сможете на пальцах объяснить?
5 kubik_live
 
17.04.26
18:42
Да, ещё:

Офис на сервере 2010 Prof (x64)

Офис (при работе в файловой - отладка)
Microsoft® Word 2021 MSO (16.0.14326.20450), 64-разрядная версия
6 timurhv
 
17.04.26
21:02
(5) Тут у вас все на клиенте вертится заполнение, сервер непричем.
Отключить проверку правописания.

НО, крайне рекомендую переделать под (1) - там просто махом заполнится, хоть 1000 листов.
Плюс если в момент вывода через COM на клиенте пользователь выполнит ctrl+C и ctrl+V, то этот текст вставится и в Word, хотя Word у пользователя и не открыт был. У сотрудника будет шок, когда он скопирует в чате коллег сообщение какой ген.директор козел и отправит Word-документ ген.директору, где скопированное сообщение будет вставлено где-то на 30-ой странице документа.
7 kubik_live
 
18.04.26
14:28
(7) Спасибо большое, буду изучать инструмент (1)
Если есть пример готовый ВПФ типа "Hello,world", буду очень благодарен
8 Garykom
 
гуру
18.04.26
20:45
9 kubik_live
 
18.04.26
22:56
(8) "Это и я так умею!" © Промокашка "Место встречи изменить нельзя"

По существу использования, что описано в (1), в присланном мне макете для заполнения не удалось выполнить.
Начал копировать присланный  макет по элементам в новый док-макет = очень муторно, структура шапки макета тяжелая.
После этого начало работать.
Пока ещё разбираюсь (на мой взгляд) с (1): технология в (1) весьма трудоемка для внедрения заполнения в сторонние макеты.
Если создавать с "нуля" - тогда годится
10 2mugik
 
18.04.26
23:12
БСП не поможет? Вроде бы до что-то
11 kubik_live
 
18.04.26
23:27
(10)
в (1) как раз и использование БСП
12 timurhv
 
19.04.26
01:08
(9) Оно муторно в первый раз, условно дня 2 потратите разобраться с этим механизмом. А потом по-накатанной, зато забудете раз и навсегда COM, сможете большие документы формировать и тп.
13 2mugik
 
19.04.26
08:23
может клиент серверной 1С запускается на другом компе, чем файловая? РДП например. получается что файловая 1с норм по кому работает, а клиент серверной нет.
14 kubik_live
 
19.04.26
10:56
(12) Согласен. Сейчас разобрался с нумерованным списком и таблицами. Начинает все больше нравиться этот механизм.
Спасибо Вам большое!
15 kubik_live
 
19.04.26
11:02
(13) Тут (0) что-то другое: именно затык происходит, когда в макете присутствуют таблицы с кол-вом строк более 10-15. С банальными текстовыми подстановками в шаблон, COM нормально отрабатывает
16 kubik_live
 
20.04.26
21:13
(12) Тимур, есть вопрос по поводу вывода списка по методе (1).
:Можно ли в конкретной строке выводимого списка часть текста   строки изменить цвет и установить подчеркивание?
Как это можно сделать

Вот фрагмент макета
{v8 Область.СписокУровень1}
1.    {v8 ТекстСписок1}
{/v8 Область.СписокУровень1}
17 kubik_live
 
20.04.26
21:31
(16) Дошло как: в структуру вывода впихнуть 3 элемента с массивами необходимых частей строк

{v8 Область.СписокУровень1}

1.    {v8 ТекстСписок1Часть}  {v8 ТекстСписок1Часть_ЭтуКрасимЦветом}..... {v8 ТекстСписок1Часть_ЭтуПодчеркиваем}

{/v8 Область.СписокУровень1}

Проверил, получилось!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.