Имя: Пароль:
1C
1С v8
v8: Работа по Com (Word)
0 SIS72
 
19.01.10
09:58
Пишу внешнюю обработку - печатает по шаблону DOC договор контрагента (договор время от времени может меняться).
Использую такой упрощенный код:

Word = Новый ComОбъект("Word.Application");
Word.Documents.Add(ШаблонДоговорПуть);
Word.Visible = 1;
Doc = Word.ActiveDocument;
 
Для сч=1 По Doc.Variables.Count Цикл
Имя = Doc.Variables(сч).Name;
Сообщить(" переменная "+Имя);
КонецЦикла;
 
Doc.Fields.Update();
Doc.Fields.UnLink();

Вставляю в шаблон DocVariables через Вставить\Поле\DocVariable. В отладке Doc.Variables.Count = 0, что я сделал не так? Сам документ выводится. И еще DocVariables после вставки не как себя не проявляет - после вставки должно что-то появиться в DOC или нет? Может вопрос и тупой - но сам не чего найти немогу....  

Благодарю за советы заранее! Удачи ВАМ!!!
4 asady
 
19.01.10
10:02
(0) ты ком от оле отличаешь?
6 i-rek
 
19.01.10
10:21
(4) в случае ворда разницы нет

вот кстати через поля документа в ворде у меня никогда так не получалось сделать.
И все кто делал, то что я видел - делали через поиск и замену строк шаблона
7 lxs
 
19.01.10
10:21
Кусок из книги Габца и Гончарова "Простые примеры разработки".

Как сформировать новый договор на основании файла Microsoft Word?

Договор = ПолучитьМакет("Договор");

// Получить объект из макета.
MSWord = Договор.Получить();
НаименованиеКонтрагента = "ООО Торгуем всем";

Попытка
   Документ = MSWord.Application.Documents(1);
   Документ.Activate();

   // Получить объект, который будем использовать для поиска и замены.
   Замена = Документ.Content.Find;

   // Заменить заранее определенные ключевые конструкции на требуемый текст.
   Замена.Execute("<НазваниеКомпании>", Ложь, Истина, Ложь, , , Истина, , Ложь, НаименованиеКонтрагента);

   // Далее аналогично для остальных ключевых конструкций.

   // Делаем видимым приложение и активизируем его.
   MSWord.Application.Visible = Истина;
   MSWord.Activate();

Исключение

   // Если произойдет ошибка выводятся данные об ошибке и объект закрывается.
   Сообщить(ОписаниеОшибки());
   MSWord.Application.Quit();

КонецПопытки;
8 i-rek
 
19.01.10
10:25
(7) что тоже только подтверждает, что объектная модель ворда в этом вопросе на столько мутная, что даже Габец и Гончаров ею правильно воспользоваться не могут
9 lxs
 
19.01.10
10:32
(8) +1
10 SIS72
 
19.01.10
13:32
Вот только в нешней обработке на
Договор = ПолучитьМакет("Договор");
сразу ругается - пишет типа не знаю что такое "ПолучитьМакет"
11 anatoly
 
19.01.10
13:35
зачем изобретать велосипед?
посмотри:
http://infostart.ru/public/22326/
http://infostart.ru/public/22353/
12 lxs
 
19.01.10
13:39
(10) точно "не знаю что такое" ??? уверен? У тебя макет есть в обработке? тип его Active Document?
Программист всегда исправляет последнюю ошибку.