Имя: Пароль:
1C
1С v8
Новый COMОбъект("Word.Application");
0 alexei366
 
07.05.13
15:14
Народ использую в качестве макета в одном месте документ word, вроде всё написал, чтоб переменные заменялись и табличные части делались.
Потом задумал фигарить в несколько потоков, имеется ввиду что обычно за раз формируются документов 5, и чтобы при нажатии на кнопку запускалось одновременно 5 фоновых заданий, каждое из которых заполняет свой макет.

Тут я коечо затестил, у меня в коде для размножения таблиц используются методы word Copy() и Paste(). Но эти методы работают с буфером, т.е берём два фоновых заданий и вот первое заносит в буфер строку таблицы из своего макета и успевает вставить 3 строки их 5, и тут второе фоновое задание копирует в буфер свою строку из своего макета, на выходе получим нормальный второй документ а в первом 4 и 5 строки будут левыми скопированные из другого макета и ясен фиг с другими параметрами.

Кто-нить сталкивался и как тогда решал такой вопрос, а кто не сталкивался посоветуйте чем заменить эти методы ворда.
1 mikecool
 
07.05.13
15:17
недавно была тема про булзип принтер...
может там нашли решение многопоточности
2 alexei366
 
07.05.13
15:28
(1) ты чего поиздеваться решил (моя тема была, многопоточности у него как понял нет, нужно реализовывть чтото между базами и булзипом чтоб настройки печати не путались)

А к данной теме это отношения в плане реализации не имеет.
3 mikecool
 
07.05.13
15:29
(2) бугога, думаешь я всех запоминаю?
4 acsent
 
07.05.13
15:32
откажись от использования буфера
5 alexei366
 
07.05.13
15:33
(4) скажи чем заменить?
6 alexei366
 
07.05.13
15:34
(3) да мне по барабану, у тя мысли есть как задачу эту решить?
7 mikecool
 
07.05.13
15:35
(6) не использовать буфер )))
8 mikecool
 
07.05.13
15:35
+7 считывай структуру и по ней рисуй новый док
9 alexei366
 
07.05.13
15:41
(8) А пример приведёшь по считыванию структуры?
10 alexei366
 
07.05.13
16:56
Блин в сандартной конфе также делают

ОбластьHandler.Document.Range(ОбластьHandler.Start, ОбластьHandler.End).Copy();
   
   ActiveDocument = ПечатнаяФорма.COMСоединение.ActiveDocument;
   
   // вставляем первый строку, по которому далее будет выполняться
   // вставка новых строк с форматированием по первой
   ВставитьРазрывНаНовуюСтроку(ПечатнаяФорма);
   ПозицияВставки = ActiveDocument.Range().End;
   ОбластьВставки = ActiveDocument.Range(ПозицияВставки-1, ПозицияВставки-1);
   ОбластьВставки.Paste();
   ActiveDocument.Range(ПозицияВставки-2, ПозицияВставки-2).Delete();
11 alexei366
 
07.05.13
22:28
АПП
12 alexei366
 
08.05.13
10:41
Народ кто поможет если сможет)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.