|
Подключения макета 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 = Неопределено; Возврат Неопределено; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |