Имя: Пароль:
1C
 
Заполнение макета Word. Помогите ускорить работу кода
0 Роспатнюк Сергей Сер
 
17.04.18
11:03
Помогите пожалуйста ускорить работу кода. Конфигурация: Зарплата и Управление Персоналом, редакция 2.5 (2.5.130.2), Платформа 1С:Предприятие 8.3 (8.3.10.2580)

в этой процедуре в первой строке Замена.Execute кол-во 3990 время 091.44%

Процедура ЗаполнитьПараметры(Замена, НаименованиеПараметра, СтрокаКЗаполнению)
    
    Стр    = СтрокаКЗаполнению;
    
    Для Сч = 1 По 114 Цикл
        
        Попытка
            Замена.Execute(НаименованиеПараметра + Сч,     Ложь, Истина, Ложь, , , Истина, , Ложь, Лев(Стр,1), 2);

        Исключение
            Замена.Execute(НаименованиеПараметра + Сч,     Ложь, Истина, Ложь, , , Истина, , Ложь, "", 2);
        КонецПопытки;
        
        Стр    = Сред(Стр,2);
        
    КонецЦикла;
        
КонецПроцедуры
1 Beduin
 
17.04.18
11:05
(0) А почему 114?
2 mehfk
 
17.04.18
11:11
(0) Чем помочь? Отсюда не видно что есть "Замена".
3 Джо-джо
 
17.04.18
11:12
попробуте поменять
Для Сч = 1 По 114 Цикл
нп
Для Сч = 1 По 4 Цикл
4 Роспатнюк Сергей Сер
 
17.04.18
11:13
Замена    = Документ.Content.Find;
5 Роспатнюк Сергей Сер
 
17.04.18
11:14
код писал не я так что почему 114 еще не знаю.
6 mehfk
 
17.04.18
11:14
А ты интриган.
7 Lexey_
 
17.04.18
11:14
(4) а Документ наверно это СтрПрФр.ГрБрМР?
8 SleepyHead
 
гуру
17.04.18
11:14
Не надо ничего ускорять. Программа должна работать солидно, мигая лампочками, иначе уважать не будут.
9 Вафель
 
17.04.18
11:14
потому что всего 114 параметров.
Явно нужно думать чтобы не все номера заменять, а только те что есть.
Например при записи макета искать номер максимального параметра
10 Beduin
 
17.04.18
11:17
(5) Ты лучше расскажи, как так получилось что тебе пришлось с этим разбираться?
11 Роспатнюк Сергей Сер
 
17.04.18
11:17
ТабДокумент = ПолучитьМакет("МакетWord");
    MSWord         = ТабДокумент.Получить();
    Документ    = MSWord.Application.Documents(1);
    Документ.Activate();
    
    Selection    = MSWord.Application.Selection;
    
    Selection.Expand(6); //WholeStory;
    Selection.Copy();
    //Документ.Content.Copy();
    
    Замена    = Документ.Content.Find;
12 Fish
 
17.04.18
11:17
(9) А я так понял из (0), что он 114 раз один и тот же параметр заполняет.
13 Вафель
 
17.04.18
11:18
(12) побуквенно.
Скорее всего это типо фамилии в клеточках
14 assasu
 
17.04.18
11:19
(0) 114 параметров в печатной форме? я не верю...
вдруг там есть повторяющиеся, так их можно все подменить одним вызовом.
15 Fish
 
17.04.18
11:19
+(13) А не, не заметил +Сч. Всё-таки разные :))
16 Fish
 
17.04.18
11:20
(13) "Скорее всего это типо фамилии в клеточках" - Похоже.
17 Segate
 
17.04.18
11:21
Проанализируй в каком случае Лев(Стр,1) вызывает ошибку, и обрабатывай отдельно условием, а не повторным вызовом ком объекта.

у него есть строка. в строке(очевидно) есть некий символ параметр и некий символ разделитель.(это очевидно из того что Лев(Стр,1) это данные заполнения параметра, а "Стр    = Сред(Стр,2);" обрезает строку) Потому я бы не парился, а для начала бы сделал стрРазделить и получил бы массив параметров из строки, а потом бы обращался к параметру по индексу.
18 Вафель
 
17.04.18
11:22
можно цикл переделать на стрдлина()
19 Вафель
 
17.04.18
11:23
%20-30 можно отыграть
20 Роспатнюк Сергей Сер
 
17.04.18
11:24
(10) нужно перенести из зуп 8.2 в зуп 8.3 варианты есть но они достаточно проблемные. (16) ну да фамилии адреса папортные данные и т.д. (18) спс попробуем сделать так.
21 Вафель
 
17.04.18
11:26
может на 1сные формы переделать?
Все-таки в клеточках не очень для ворда
22 dmpl
 
17.04.18
11:28
(0) Переделай на HTML макет.
23 Роспатнюк Сергей Сер
 
17.04.18
11:29
(22) да думаю буду переделывать макет добро дали.
24 assasu
 
17.04.18
11:30
(20) в офисе столько возможностей. разве нельзя сделать что бы  переменная заполнялась одной строкой , а выглядела как по клеточкам? зачем эта аналогия с 1с -м mxl?
25 dmpl
 
17.04.18
11:31
(23) Реально работы меньше, чем оптимизировать (если из того же Word'а макет сохранить в HTML), зато потом ни Word не нужен, ни COM, и вообще в браузере все видно.
26 Роспатнюк Сергей Сер
 
17.04.18
11:36
Всем большое спасибо,область работы понятна,а то даже не знал откуда начинать.
27 hhhh
 
17.04.18
11:37
вот это тоже

Стр    = Сред(Стр,2)

если там строка в миллион символов, то 114 раз эта фигня запускается.
28 Вафель
 
17.04.18
11:37
(24) И как же так сделать?
29 Роспатнюк Сергей Сер
 
17.04.18
12:07
(25) я правильно понял что можно просто открыть Word и сохранить в формате html?
30 dmpl
 
17.04.18
12:09
(29) Да. Код будет жутко неоптимальный, но чаще всего весьма похожий на оригинал.
31 Вафель
 
17.04.18
12:16
html не умеет по страницам бить корректно
32 ILM
 
гуру
17.04.18
12:18
Судя по коду, там вообще на шаблоне 114 параметров и все заполняется по одному. Лучше сделать поля, а потом в поля значения вставлять.
33 Роспатнюк Сергей Сер
 
17.04.18
12:24
(32) судя по макету их там гораздо больше,114 это максимальное количество одного параметра такого как АдресПрописка1-АдресПрописка114 остальных параметров гдето по 70
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший