Имя: Пароль:
1C
1С v8
Подключения макета Word в 1с
0 Tumakota
 
24.02.13
12:12
ОбъектВорд = ПолучитьМакет("Макет").Получить();
   
   // Получим документ из объекта и активируем его
   Документ = ОбъектВорд.Application.Documents(1);
   Документ.Activate();

Свойства макета "ActiveDocument" раньше работало, сейчас запускаю  пишет  ошибку
"{Справочник.а_ЗаключениеДоговоровИсходящий.Форма.ФормаЭлемента(176)}: Значение не является значением объектного типа (Activate)
   Документ.Activate();"

Не могу понять что случилось, может кто нить подскажет
1 ВалераОшкин
 
24.02.13
13:32
вот так надо

// Функция заполняет и открывает вородовский шаблон по переданному документу
Функция ПечатьШаблонаВорд(ИдентификаторКоманды, СсылкаНаОбъект) Экспорт
   
   Перем ПолноеИмяФайла;
   
   Шаблон = УПН_ОбщиеПроцедуры.ПолучитьШаблон(ИдентификаторКоманды.КодПечатнойФормы);
   Если Не ЗначениеЗаполнено(Шаблон) Тогда
       Возврат Ложь;
   КонецЕсли;
   
   Если Не СохранитьФайл(Шаблон, ПолноеИмяФайла) Тогда
       Возврат Ложь;
   КонецЕсли;
       
   WD = Новый COMOBject("Word.Application");
   Попытка
       WordDoc = WD.Documents.Open(ПолноеИмяФайла,,0);
   Исключение
       Возврат Неопределено;
   КонецПопытки;
   
   WordDoc = WD.ActiveDocument;
   wdWord = 2;
   wdExtend = 1;
   wdWindowStateMaximize = 1;
   WD.ActiveWindow.View.ShowFieldCodes = 0;
   
   //++ М.С.Р. 06.12.2012 16:18:45
   //Закладки
   ОбработатьЗакладкиWordИндивидуально(Wd,WordDoc,СсылкаНаОбъект);
   //-- М.С.Р. 06.12.2012 16:18:47
   
   NumOfFields = WordDoc.Fields.Count;

   // Колонтитулы
   Для Сч = 1 по WordDoc.Sections.Count Цикл
       ЗаполнитьКолонтитул(Сч, 1, WD, WordDoc, СсылкаНаОбъект, Неопределено);
       ЗаполнитьКолонтитул(Сч, 2, WD, WordDoc, СсылкаНаОбъект, Неопределено);
       ЗаполнитьКолонтитул(Сч, 3, WD, WordDoc, СсылкаНаОбъект, Неопределено);
   КонецЦикла;    
             
   //Шапка
   Для Инд = 1 по WordDoc.Fields.Count Цикл
       Ном = NumOfFields - Инд + 1;
       Если Ном > WordDoc.Fields.Count Тогда
           Продолжить
       КонецЕсли;
       WordDoc.Fields(Ном).Select();
       ИмяРеквизита = WD.Selection.Text;
       
       Если ПустаяСтрока(ИмяРеквизита) Тогда
           WD.ActiveWindow.View.ShowFieldCodes = -1;
           WD.Selection.Delete();
           WD.ActiveWindow.View.ShowFieldCodes = 0;
           Продолжить;
       КонецЕсли;                                  
       
       Значение = УПН_ОбщиеПроцедуры.ПолучитьЗначениеРеквизитаДляWord(СсылкаНаОбъект, ИмяРеквизита, ПолучитьСсылкуНаЗащищеннуюОбработку());
       Если Значение <> Неопределено И ЗначениеЗаполнено(Значение) Тогда // М.С.Р. изменил 10.12.2012 16:14:25
           Wd.ActiveWindow.View.ShowFieldCodes = -1;
           Wd.Selection.Text = Строка(Значение);
           Wd.ActiveWindow.View.ShowFieldCodes = 0;
       Иначе
           Wd.Selection.Font.Color = 255;
       КонецЕсли;
   КонецЦикла;    
       
   // Табличная часть
   ВсегоТЧ = УПН_ОбщиеПроцедуры.ПолучитьКоличествоТЧ(СсылкаНаОбъект);
   Для WordDocTableNuber = 1 По WordDoc.Tables.Count() Цикл
       TC = WordDoc.Tables(WordDocTableNuber);
       
       // Обходим все строки таблицы в документе Ворд
       НомерСтрокиДок = 1;
       Попытка
           СтрокаТаблицы = TC.Rows(НомерСтрокиДок);
       Исключение
           // Есть строки объединеные по вертикали
           Продолжить;
       КонецПопытки;
       //Для Каждого СтрокаТаблицы Из TC.Rows Цикл
       Пока НомерСтрокиДок <= TC.Rows.Count() Цикл
           СтрокаТаблицы = TC.Rows(НомерСтрокиДок);
           // Ищем реквизит ТЧ
           НашлиРеквизитТЧ = Ложь;
           КоличествоПолей = СтрокаТаблицы.Range.Fields.Count;
           Если КоличествоПолей > 0 Тогда
               Для Инд = 1 По КоличествоПолей Цикл
                   Ном = КоличествоПолей - Инд + 1;
                   СтрокаТаблицы.Range.Fields(Ном).Select();
                   ИмяРеквизита = WD.Selection.Text;                        
                   Если ПустаяСтрока(ИмяРеквизита) Тогда
                       Продолжить;
                   КонецЕсли;  
                   // Получим имя ТЧ
                   ПозицияТочки = Найти(ИмяРеквизита, ".");
                   Если ПозицияТочки > 0 Тогда
                       ИмяТЧ = Лев(ИмяРеквизита, ПозицияТочки - 1);
                   Иначе
                       Продолжить;
                   КонецЕсли;
                   Если Не УПН_ОбщиеПроцедуры.ОбъектСодержитТЧ(СсылкаНаОбъект, ИмяТЧ) Тогда
                       Продолжить;
                   Иначе
                       НашлиРеквизитТЧ = Истина;
                   КонецЕсли;
                   //ТабличнаяЧасть = УПН_ОбщиеПроцедуры.ПолучитьТаблицуЗначенийИЗТЧ(СсылкаНаОбъект, ИмяТЧ);
                   Прервать;
               КонецЦикла;                    
           КонецЕсли;
           
           Если Не НашлиРеквизитТЧ Тогда
               НомерСтрокиДок = НомерСтрокиДок + 1;
               Продолжить;
           КонецЕсли;
           
           // Добавляем пустые строки по количеству строк в ТЧ документа
           ПерваяСтрока = Истина;
           КоличествоСтрокТЧ = УПН_ОбщиеПроцедуры.ПолучитьКоличествоСтрокТЧ(СсылкаНаОбъект, ИмяТЧ);
           Если КоличествоСтрокТЧ = 0 Тогда
               Если TC.Rows.Count() = 1 Тогда
               Иначе
                   СтрокаТаблицы.Range.Cut();
               КонецЕсли;
           Иначе
               Для Сч = 1 По КоличествоСтрокТЧ Цикл
                   Если ПерваяСтрока Тогда
                       ПерваяСтрока = Ложь;
                       СтрокаТаблицы.Range.Copy();
                   Иначе    
                       СтрокаТаблицы.Range.Paste();
                   КонецЕсли;    
               КонецЦикла;
           КонецЕсли;
           
           // Обход таблицы документа по столбцам и заполняем строки
           Для Сч = 1 По КоличествоСтрокТЧ Цикл
               НомерСтрокиТЧ = НомерСтрокиДок + Сч - 1;
               СтрокаТаблицы = TC.Rows(НомерСтрокиТЧ);
               КоличествоПолей = СтрокаТаблицы.Range.Fields.Count;
               Если КоличествоПолей > 0 Тогда
                   Для Инд = 1 По КоличествоПолей Цикл
                       Ном = КоличествоПолей - Инд + 1;
                       СтрокаТаблицы.Range.Fields(Ном).Select();
                       ИмяРеквизита = WD.Selection.Text;                        
                       Если ПустаяСтрока(ИмяРеквизита) Тогда
                           Продолжить;
                       КонецЕсли;                                  
                       Если ИмяТЧ = Лев(ИмяРеквизита, СтрДлина(ИмяТЧ)) Тогда // Это реквзит ТЧ
                           ИмяРеквизита = Сред(ИмяРеквизита, СтрДлина(ИмяТЧ) + 2);
                           Значение = УПН_ОбщиеПроцедуры.ПолучитьЗначениеРеквизитаТЧДляWord(СсылкаНаОбъект, ИмяТЧ, Сч, ИмяРеквизита, ПолучитьСсылкуНаЗащищеннуюОбработку());
                           Если Значение <> Неопределено И ЗначениеЗаполнено(Значение) Тогда // М.С.Р. изменил 10.12.2012 16:14:25
                               Wd.ActiveWindow.View.ShowFieldCodes = -1;
                               Wd.Selection.Text = Строка(Значение);
                               Wd.ActiveWindow.View.ShowFieldCodes = 0;
                           Иначе
                               Wd.Selection.Font.Color = 255;
                           КонецЕсли;
                       Иначе // Это реквизит документа
                           Значение = УПН_ОбщиеПроцедуры.ПолучитьЗначениеРеквизитаДляWord(СсылкаНаОбъект, ИмяРеквизита, ПолучитьСсылкуНаЗащищеннуюОбработку());
                           Если Значение <> Неопределено И ЗначениеЗаполнено(Значение) Тогда // М.С.Р. изменил 10.12.2012 16:14:25
                               Wd.ActiveWindow.View.ShowFieldCodes = -1;
                               Wd.Selection.Text = Строка(Значение);
                               Wd.ActiveWindow.View.ShowFieldCodes = 0;
                           Иначе
                               Wd.Selection.Font.Color = 255;
                           КонецЕсли;
                       КонецЕсли;
                   КонецЦикла;                    
               КонецЕсли;
           КонецЦикла;
           
           НомерСтрокиДок = НомерСтрокиДок + ?(КоличествоСтрокТЧ = 0, 1, КоличествоСтрокТЧ);
           
       КонецЦикла;
   КонецЦикла;    

   WordDoc.Save();
   
   Если ИдентификаторКоманды.Команда = "Печать" Тогда //++ М.С.Р. 06.12.2012 17:17:08
       
       Wd.Visible=-1;
       Wd.Activate();        
       Wd.WindowState = wdWindowStateMaximize;
       
       Если WD.ActiveWindow.View.SplitSpecial = 0 Тогда
           WD.ActiveWindow.ActivePane.View.Type = 3;
       Иначе
           WD.ActiveWindow.View.Type = 3;
       КонецЕсли;
       
   ИначеЕсли ИдентификаторКоманды.Команда = "Сохранить" Тогда
       WordDoc.Close();
       РаботаСФайламиКлиент.СоздатьДокументНаОсновеФайла(ПолноеИмяФайла, СсылкаНаОбъект, Новый Структура("УникальныйИдентификатор",Новый УникальныйИдентификатор), Ложь, СокрЛП(Шаблон));
   КонецЕсли;
       
   WordDoc = Неопределено;
   
   Возврат Неопределено;
   
КонецФункции