макетом ворде? Все сделал а как подключить чёт застрял. До этого подключал на простом табличной доке. Так не работает.
Ворд надо загрузить в макет ActiveDocument
Мне кажется тут проблема не в ворде
Как правильно выводится вордовский макет? На печать.
у меня все договоры подключены так на зуп-ах. Там правда есть момент где формировать и где выводить на печать. (наКлиенте и наСервере)
У тебя ворд макет и внешняя ПФ? Сможешь скинуть?
1. описание ДобавитьКоманду(ТаблицаКоманд, "Трудовой договор срочный ", "Макет", "ВызовКлиентскогоМетода", Истина, ""); 2. Макет - шаблон word 3. в модуле формы обработки &НаСервере Функция ПолучитьМакетСервер() Возврат РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет"); КонецФункции &НаКлиенте Процедура Печать(ИдентификаторКоманды, МассивОбъектов) Экспорт Для Каждого договор Из МассивОбъектов Цикл Данные = ПолучитьДанные(договор); //получает данные по сотруднику Если данные <> Неопределено Тогда Word = Новый COMОбъект("Word.Application"); Макет = ПолучитьМакетСервер(); временныйПуть = КаталогВременныхФайлов(); имяВременногоФайла = временныйПуть + "gph.doc"; Макет.Записать(имяВременногоФайла); ТекДок = Word.Documents.ADD(имяВременногоФайла); ТекДок.Variables("НомерТД").Value=Данные.НомерТД; ТекДок.Variables("ДатаТД").Value=Данные.ДатаТД; ТекДок.Fields.Update(); Word.ActiveWindow.View.ShowFieldCodes = False; Word.Visible=Истина; ПередатьФокусВводаВWord(Word);// КонецЕсли; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ПередатьФокусВводаВWord(word) Перем wdWindowStateNormal; Перем wdWindowStateMinimize; Перем wdWindowStateMaximize; wdWindowStateNormal = 0; wdWindowStateMaximize = 1; wdWindowStateMinimize = 2; Попытка word.Visible = Истина; //Сворачиваем окно, затем разворачиваем, что приводит к его активизации Если word.WindowState = wdWindowStateNormal Тогда word.WindowState = wdWindowStateMinimize; word.WindowState = wdWindowStateNormal; Иначе word.WindowState = wdWindowStateMinimize; word.WindowState = wdWindowStateMaximize; КонецЕсли; Исключение КонецПопытки; КонецПроцедуры
спасибо попробую так
я вот так делал Данные = ПолучитьДанные(СсылкаНаОбъект.Сотрудники.Найти(Сотрудник,"Сотрудник")); Договор=ПолучитьМакет("ДоговорСрочный"); // Получить объект из макета. MSWord = Договор.Получить(); Попытка Документ = MSWord.Application.Documents(1); Документ.Activate(); Для Каждого Элемент ИЗ Данные Цикл Если СтрДлина(Строка(Элемент.Значение)) > 180 Тогда СтрокаВставки = Строка(Элемент.Значение); Пока СтрДлина(СтрокаВставки)>180 Цикл Строка = Лев(СтрокаВставки, 180); СтрокаВставки = СтрЗаменить(СтрокаВставки, Строка, ""); Строка = Строка + "<" + Элемент.Ключ + ">"; Замена = Документ.Content.Find; Замена.Execute("<" + Элемент.Ключ + ">", Истина, Истина, Ложь, Ложь, Ложь, Истина, , , СтрокаВставки, 2); КонецЦикла; Продолжить; КонецЕсли; Замена = Документ.Content.Find; Замена.Execute("<" + Элемент.Ключ + ">", Истина, Истина, Ложь, Ложь, Ложь, Истина, , , Строка(Элемент.Значение), 2); КонецЦикла; MSWord.Application.Visible = Истина; MSWord.Activate(); Исключение // Если произойдет ошибка, выводятся данные об ошибке, и объект закрывается. Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = ОписаниеОшибки(); Сообщение.Сообщить(); MSWord.Application.Quit(); КонецПопытки;
Обсуждают сегодня