1с 8.3 файл ворд ole пример. Подключение дополнительных внешних печатных форм

ВНИМАНИЕ! При использовании кодов описанных ниже, уберите символ _
Давайте рассмотрим на примерах как это делается! =) Мне известно 2 способа:
1. Путем замены шаблонного текста в макете Wordа.
2. Путем вставки текста с помощью закладок в Wordе,

В первом случае сразу скажу, что длина строки передаваемая в функцию замены, довольно небольшая 255 символов, да и расстановка шаблонных выражений в макете Word занимает довольно много времени. Через процедуру Content.Find.Execute.

Во втором случае длина, насколько мне известно неограниченна, также воськаться с закладками намного быстрее и удобнее, чем расставлять шаблонный текст. Используя Bookmarks().S_elect(). Поэтому давайте на коде рассмотрим второй пример.

И так, для начала необходимо добавить Word макет к документу. Добавляем макет с помощью конструктора макетов указав Active document и выбрав соответствующий макет.

Называем его Акт. Открываем макет в 1Ске, ставим курсор в нужном месте, переходим в меню Вставка закладка нажимаем добавить закладку к примеру у меня это НарушенияТекст

Теперь кидаем на форму документа кнопку Сформировать и по нажатию на нее пишем код который открывает наш макет Word ищем закладку по имени и вставляет туда текст:
Код 1C v 8.х //инициализация часть 1
СсылкаМакет = ПолучитьМакет(Акт);
MSWord = СсылкаМакет.Получить();
Попытка
СсылкаМакет = MSWord.Application.Documents(1);
СсылкаМакет.Activate();
//выгружаем табличную часть с нарушениями в строку часть 2
str = Новый COMОбъект(ADODB.Stream);
str.Open();
СтрочкаТаблицы = ЭлементыФормы.Нарушения.ТекущиеДанные;
Для Каждого СтрочкаТаблицы Из Нарушения Цикл
str.WriteText(+ СтрочкаТаблицы.Описание + Нарушены требования СНИПФЗГОСТ: + СтрочкаТаблицы.СНИПФЗГОСТ + Статья: + СтрочкаТаблицы.ЧастьСтатья + Символ(13),0);
КонецЦикла;
str.Position = 0;
НарушенияТекст = str.readText();

//вставляем в закладку текст с нарушениями часть 3
MSWord.Bookmarks(НарушенияТекст).S_elect();
MSWord.Application.S_election.TypeText(НарушенияТекст);

СсылкаМакет.Activate();
Исключение
//если ошибка
Сообщить(ОписаниеОшибки());
MSWord.Application.Quit();
КонецПопытки;
Это пример вывода множества строчек из табличной части одной строкой, если нужно просто выгрузить какой-то реквизит то можно пропустить часть 2 и перейти к части 3.

Для выгрузки табличной части в форме таблицы можно использовать функцию автоформата, примеру код выгрузки табличной части документа Предписание:
Код 1C v 8.х Word = MSWord.Application;
Документ = Word.ActiveDocument();
//Переместиться вниз на 22 строк
Word.S_election.MoveDown(,22);
Документ.Paragraphs.Add();
//подготовка таблицы:
Rng = Word.S_election.Range;
//Формируем заголовок:
Rng.I_nsertAfter(№ п/п*Установленные нарушения и меры по их устранению*Основания);
Rng.I_nsertParagraphAfter();
//сама таблица
СтрочкаТаблицы = ЭлементыФормы.НарушенияПредписание.ТекущиеДанные;
Для Каждого СтрочкаТаблицы из НарушенияПредписание Цикл
Rng.I_nsertAfter(Строка(СтрочкаТаблицы.НомерСтроки)+*+СтрочкаТаблицы.Описание + ; + СтрочкаТаблицы.Предписание +* + СтрочкаТаблицы.СНИПФЗГОСТ + + СтрочкаТаблицы.ЧастьСтатья);
Rng.I_nsertParagraphAfter();
КонецЦикла;
Rng.ConvertToTable(*);
Документ.Tables(1).AutoFormat(17); //номер таблицы в шаблоне
Word.Visible = Истина;
Ну вот и все =)

Еще способ Active document
В Конфигураторе Макеты - правый клик - Добавить
Тип макета: Active document
Создать новый - Документ Microsoft Word

Меню Вставка - Поле - Автоматизация - DocVariable
Написать имя поля в графе "Новое имя:" ДатаПриказа

В модуле формы документа создаем кнопку, и в ее обработчике пишем:



КомОбъект.Variables.Item("ДатаПриказа").Value="24.01.2007";
КомОбъект.Fields.UpDate();

КомОбъект.PrintOut(); //распечатать документ

//Ожидание окончания отправки на печать...
Пока objWord.Application.BackgroundPrintingStatus<>0 Цикл
Предупреждение("Ожидание",1);
КонецЦикла;

КомОбъект.Application.Quit(); //закрыть Word
КомОбъект = 0;
КонецПроцедуры

2) добавляем не поле, а Закладку
Меню Вставка - Закладка и далее указываем ее имя ("ИмяЗакл")
Код 1C v 8.х Процедура ОсновныеДействияФормыWord(Кнопка)
АктивныйДокумент = ПолучитьМакет("Макет");
КомОбъект = АктивныйДокумент.Получить();
КомОбъект.Application.Visible=1;
КомОбъект.Bookmarks(СокрЛП("ИмяЗакл")).S_elect();
КомОбъект.Application.S_election.TypeText(СокрЛП("тест проверка"));
КонецПроцедуры

Код 1C v 8.2 УП // Параметры договора обозначены в тексте переменными вида "[%НомерДоговора%]"
Функция ПечатьДокумента() Экспорт

Договор = ПолучитьМакет("ActiveDocument_ДоговорПоставки"); // получим макет-ActiveDocument
MSWord = Договор.Получить();
Попытка
Doc = MSWord.Application.Documents(1);
Doc.Activate();
Replace = Doc.Content.Find;

FindText = "{НомерДоговора}"; // что искать - имя_шаблона
MatchCase = Ложь; // использовать регулярные выражения
MatchWholeWord = Истина; // искать слово целиком
MatchWildcards = Ложь; // испоьзовать регулярные выражения
MatchSoundsLike = Неопределено; // искать созвучные
MatchAllWordForms = Неопределено; // искать все формы слова
Forward = Истина; // искать вперед
Wrap = Неопределено; // что должен вернуть Find-объект
Format_ = Ложь; // использовать форматирование
ReplaceWith = "N777"; // текст, на который надо заменить имя_шаблона

// кратко:
//Replace.Execute(FindText,Ложь,Истина,Ложь,Истина,Ложь,НомерДоговора);

Replace.Execute(
FindText,
MatchCase,
MatchWholeWord,
MatchWildcards,
MatchSoundsLike,
MatchAllWordForms,
Forward,
Wrap,
Format_,
НомерДоговора);

MSWord.Application.Visible = Истина;
MSWord.Activate();
Исключение
Сообщить(ОписаниеОшибки());
MSWord.Application.Quit();
КонецПопытки;

Возврат 0;

Одно дело, когда заранее известно количество строк в таблице. И решение, соответственно, тоже простое: создать в шаблоне таблицу и заполнить переменные программно. Ссылка на данный пример //сайт/public/18940/

Но вот совсем другой подход, когда количество строк или колонок неизвестно.

История "Как я к этому пришел"

Появилась необходимость распечатывать договора по каждому контрагенту, а как известно договор может быть 1 или несколько.

Тогда, еще в 2006 году вопрос решился 5 шаблонами, в табличных частях которых было от 1 до 5 строк (ограничились 5 договорами). Вопрос решился и забылся. Но вот вопрос стал актуален по причине печати нового договора, в котором задействована номенклатура, а количество строк ведь может переваливать добрую сотню наименований. И следовательно - выход в создании динамической таблицы в шаблоне Word, который и описан двумя самыми простыми способами.

Есть 2 подхода к созданию таблицы.

1) Вам нужна таблица с равной шириной колонок, так сказать созданная автоматически.

2) У вас есть шаблон таблицы (только шапка и 1 строка).

Код создания таблицы с автоформатом .

Процедура СоздатьПример1(Кнопка) НовоеНапоминание = ПолучитьМакет("Пример1"); Массив = Новый Массив(5);//сделаем таблицу из 5 строк + шапка MsWord = НовоеНапоминание.Получить(); //макет является ActiveDocwment с загруженым в него Word-файлом Попытка //Вставление таблицы с 10 строки MsWord.Application.Visible = 0; Word = MsWord.Application; Док=Word.Documents(1); Док.Activate(); //подготовка таблицы: //Вариант №1 Самый простой Word.Selection.MoveDown(,10); //10 строка - первая строка таблицы //Конец Варианта №1 //Вариант №2 Word.Bookmarks("ff").Select(); //Где ff - это набор любых символов, вплоть до непечатаемых;) //Конец Варианта №2 Табл= Word.Selection.Range; //Формируем заголовок: Табл.InsertAfter("Сумма*Валюта*Назначение*Дата долга*Вид документа*Номер документа* *Дата оплаты"); Табл.InsertParagraphAfter(); //сама таблица Для й = 1 по Массив.Количество() Цикл Табл.InsertAfter(массЗнчСтрокиТЧ+"*"+массЗнчСтрокиТЧ+"*"+массЗнчСтрокиТЧ+"*"+массЗнчСтрокиТЧ+"*"+ массЗнчСтрокиТЧ+ "*"+массЗнчСтрокиТЧ+ "*"+массЗнчСтрокиТЧ+ "*"+массЗнчСтрокиТЧ); Табл.InsertParagraphAfter(); КонецЦикла; Табл.ConvertToTable("*"); //Происходит конвертация строки в таблицу //не нравятся звездочки - используйте другой символ Док.Tables(1).AutoFormat(1); ПечатныйНомер = "-"+Формат(ТекущаяДата(),"ДФ=yyyy.MM.dd")+"-"+Формат(ДатаОтчета,"ДФ=yyyy.MM.dd"); Файл = КаталогВременныхФайлов() + "\" + ПечатныйНомер + ".doc"; Док.SaveAs(Файл); Док.Close(0); //МассивДокументов.Добавить(Файл); //добавлял в массив путь к файлу и после всех манипуляций открывал каждый файл ЗапуститьПриложение("""" + Файл + """"); Исключение Сообщить(ОписаниеОшибки()); Word.Quit(); КонецПопытки; КонецПроцедуры

Код создания таблицы с наследуемым форматом .

Процедура СоздатьПример2(Кнопка) НовоеНапоминание = ПолучитьМакет("Пример2"); Массив = Новый Массив(5);//добавим 4 строки MsWord = НовоеНапоминание.Получить(); //макет является ActiveDocwment с загруженым в него Word-файлом Попытка MsWord.Application.Visible = 0; Word = MsWord.Application; Док=Word.Documents(1); Док.Activate(); Если Массив.Количество()>1 Тогда //Переместиться вниз на 10 строк от начала документа Word.Selection.MoveDown(,10); //10 строка - первая строка таблицы //назад на 1 символ (окончание строки таблицы) Word.Selection.MoveLeft(,1); //кво документов которые необходимо забить в табличную часть Word.Selection.InsertRows(Массив.Количество()-1); Word.Selection.MoveLeft(,1); Для й = 11 по Массив.Количество()+9 Цикл ЗаполнитьСтрокуТЧ(0,Word); Word.Selection.MoveRight(,1); КонецЦикла; КонецЕсли; ПечатныйНомер = "-"+Формат(ТекущаяДата(),"ДФ=yyyy.MM.dd")+"-"+Формат(ДатаОтчета,"ДФ=yyyy.MM.dd"); //Таблицу заполнять не буду, только шапку Замена = Док.Content.Find; Замена.Execute("", Ложь, Истина, Ложь, Истина, Ложь, "ООО "Пупкин inc.""); Замена = Док.Content.Find; Замена.Execute("", Ложь, Истина, Ложь, Истина, Ложь, Формат(ТекущаяДата(),"Л=uk; ДЛФ=D")); Замена = Док.Content.Find; Замена.Execute("", Ложь, Истина, Ложь, Истина, Ложь, ПечатныйНомер); Файл = КаталогВременныхФайлов() + "\" + ПечатныйНомер + ".doc"; Док.SaveAs(Файл); Док.Close(0); //МассивДокументов.Добавить(Файл); //добавлял в массив путь к файлу и после всех манипуляций открывал каждый файл ЗапуститьПриложение("""" + Файл + """"); Исключение Сообщить(ОписаниеОшибки()); Word.Quit(); КонецПопытки; КонецПроцедуры Процедура ЗаполнитьСтрокуТЧ(знчЭл,Word) Если знчЭл массЗнчСтрокиТЧ.Количество()-1 Тогда текЭлем = массЗнчСтрокиТЧ[знчЭл]; Rng = Word.Selection.Range; Rng.InsertAfter(текЭлем); ДлинаЗнч = СтрДлина(текЭлем)+1; Word.Selection.MoveRight(,ДлинаЗнч); Если знчЭл < массЗнчСтрокиТЧ.Количество()-1 Тогда знчЭл = знчЭл + 1; ЗаполнитьСтрокуТЧ(знчЭл,Word); КонецЕсли; КонецЕсли; КонецПроцедуры

Очень полезная внешняя обработка для всех типовых конфигураций 1С:Предприятие 8.3, позволяет формировать файл Word по выбранному шаблону из справочников и документов системы. С ее помощью вы можете распечатывать из 1С различные спецификации, трудовые договоры и договоры с контрагентами, гарантийные талоны и прочее прочее. Имея под рукой Word нужной структуры и чуть доработав его, вы получите возможность формировать его прямо из 1с с заполнением всех нужных параметров.

Принцип работы обработки следующий:

  • выбираем Word нужной структуры,
  • в тех местах файла, где необходимо вставить информацию из 1С, делаем закладки,
  • после подготовки шаблона добавляем его в 1С (справочник Файлы),
  • настраиваем заполнение шаблона печати в 1С,
  • печатаем нужные документы/справочники, выбрав созданный шаблон.

Подготовка шаблона Word

Для демонстрации работы обработки настроим печать спецификации к договору из документа Реализация товаров и услуг. Допустим, у нас есть такой Word:

Из него будем формировать полноценную спецификацию. Начинаем с того, что вставляем закладки в тех местах, где необходимо подставлять информацию из базы:



В наименовании закладок нельзя использовать пробелы.

При печати также будем заполнять таблицу товаров. Чтобы она сформировалась красиво, оставим шапку и одну пустую строку:


Сохраняем Word, закрываем.

Настройка заполнения шаблона

Теперь в программе открываем журнал документов продажи, заходим в меню печати и жмем кнопку для настройки печати по шаблону Word:


Настройка шаблонов доступна только пользователям с полными правами.

В открывшемся окне настроек первым делом создадим новый файл в программе (имеется в виду элемент справочника Файлы ) и привяжем к нему наш Word:


В открывшемся окне выбираем Добавить файл :


Затем выбираем его в настройках шаблона. После этого заполняется таблица закладок, нам нужно выбрать источники заполнения данных в этих закладках:


В качестве источника используются реквизиты самого документа продажи, а также производные от этих реквизитов:

При печати можно использовать также дополнительные реквизиты справочников и документов.

Список доступных реквизитов очень большой, удобно воспользоваться быстрым вводом:


В результате выбора источника таблица примет следующий вид:


Для значения к строках таблицы доступно склонение по падежам, а также сокращение ФИО:


Для печати таблицы в Word выберем исходную таблицу документа:


После выбора таблицы появляется справка с именами тех реквизитов, которые можно использовать для вывода таблицы в Word. Нам остается перечислить нужные реквизиты через запятую (в порядке следования колонок файла). Допускается оставлять пустое значение в колонке или писать туда произвольный текст:


Все ОК, теперь можем печатать нужный Word.

Печать по настроенному шаблону доступна теперь для всех, т.е. пользователям не нужно каждому настраивать печать самостоятельно.



Можем печатать как один документ, так и список:


На форме настроек печати помимо создания новых шаблонов можно редактировать имеющиеся:


В том случае, если для объекта настроено несколько шаблонов Word, то при выборе команды печати откроется окно с выбором нужного:


Во избежание коллизий с правами доступа пользователей к справочнику Файлы вам необходимо установить помимо самой обработки печати в Word еще и расширение для 1С (находится в одном архиве с обработкой), которое предоставит пользователям доступ на чтение справочника.

Если у вас есть вопросы/замечания/предложения по данной обработке, буду рад ответить.

Релиз 1.1.2.2 от 15.12.2018

Для вывода даты при печати шаблона добавлена возможность выбора формата, в табличной части помимо номенклатуры теперь можно указывать артикул и единицу измерения:


Теперь можно удалять ненужные шаблоны:


Релиз 1.1.2.3 от 29.01.2019

Появилась возможность выводить части даты по отдельности - день, месяц (номер или название) и год:


Для физических лиц (и контрагентов с типом физлицо) теперь можно выводить паспортные данные:


Релиз 1.1.2.4 от 12.03.2019

При печати в Word табличной части документов товародвижения появилась возможность использовать не только реквизиты этой табличной части, но и любые реквизиты номенклатуры:


Релиз 1.1.2.5 от 12.07.2019

Появилась возможно не только формировать шаблон Word, но и автоматически прикреплять его к исходному объекту (в присоединенные файлы). Для этого нужно выбрать вариант настройки Сохранить в присоединенные файлы .


По окончании процедуры печати откроется форма присоединенного файла.


Из этой формы можно при необходимости открыть на просмотр/редактирование заполненный шаблон Word.

Доброго времени суток!

Для большинства организаций стандартная печатная форма какого-либо договора в программах 1С не подходит. Поэтому фирма 1С предоставила возможность добавлять дополнительные печатные формы для документов и других объектов. В этой статье я хочу рассказать, как создать и подключить внешнюю печатную форму договора, которая будет открываться в Microsoft Word.

Подключение дополнительных внешних печатных форм

Запускаем 1С:Предприятие. Открываем справочник «Дополнительные внешние печатные формы» через меню «Сервис» - «Дополнительные отчеты и обработки».

Нажмем кнопку «Добавить», затем зарегистрируем новую печатную форму, нажав «Заменить файл внешней обработки». Автоматически заполнится принадлежность печатной формы документу «Реализация товаров и услуг». Выбираем «Договор» в колонке «Заменяемая печатная форма», чтобы стандартная печатная форма более не использовалась.

Запускаем 1С:Предприятие, открываем справочник "Контрагенты", выбираем контрагента, для которого будет печататься наш договор и по кнопке "Файлы" переходим в справочник "Хранилище дополнительной информации", загружаем в него шаблон для договора и,обязательно, называем его "Договор", как показано на рисунке ниже, иначе программа не сможет найти макет для печатной формы.

Теперь открываем любой документ "Реализация товаров и услуг" и нажимаем кнопку «Печать» - «Договор». Откроется документ Microsoft Word с договором.

Внешнюю печатную форму "Договор" и макет к ней можно скачать по ссылкам ниже.

Макет трудового договора в формате Microsoft Word

Существует, по меньшей мере, три способа создания шаблона:

1. В документе Word создаются опорные фразы, например, "[НомерДоговора]", затем, в модуле обработки производится поиск и замена значений.

2. В документе Word создаются закладки, к которым потом можно обращаться по имени. Минус этого способа в том, что метка должна быть уникальна, т.е., если нужно вставить фамилию сотрудника в каждый абзац текста, то придется сделать несколько закладок с разными именами.

3. В документе Word добавляются служебные поля, например, «DocVariable» или «Author». Используя DocVariable можно обращаться к переменной по имени, например, «ДокументВорд.Variables.Add(ИмяПеременной, ЗначениеПеременной);», но ее не видно в шаблоне. Поле «Author» отображается в шаблоне, но обращаться к нему придется в цикле по индексу: «ДокументВорд.Fields.item(Индекс).Result.Text = Значение;».

На мой взгляд, первый способ является самым оптимальным. Шаблон документа легко редактируется, опорные фразы видны в тексте. Поэтому шаблон создаём этим способом.

Открываем программу Microsoft Office. Для примера добавляем пару строк, как показано на рисунке ниже и сохраняем шаблон.

Создание внешней печатной формы "Договор"

Запускаем 1С:Предприятие в режиме «Конфигуратор» и через меню «Файл» - «Новый» создаём внешнюю обработку. Добавляем реквизит "Ссылка на объект" и макет "Параметры_Авторегистрации" с типом "Табличный документ". Тип реквизита "Ссылка на объект" зависит от того, для каких объектов будет использоваться печатная форма, в нашем случае печатная форма будет использовать для документа "Реализация товаров и услуг", поэтому указываем тип "ДокументСсылка.РеализацияТоваровУслуг".

Разработка процедуры печати

В работе программиста 1С, данный функционал требуется крайне редко, хотя благодаря нему можно решать довольно сложные задачи с динамическими и не постоянными печатными формами. При реализации данной задачи, работа по созданию шаблонов Word и расстановке закладок в шаблоне Word возлагается на пользователей 1C.

В данном примере будет показано, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных, пользователям программы 1С.

Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом:


Далее необходимо в файл шаблона для 1С, добавить текст и пару закладок. Закладка добавляется через меню «Вставка» — «Закладка». Нужно выделить текст закладки, скопировать его, открыть меню «Вставка — Закладка», вставить скопированный текст закладки и нажать «Добавить»:


Когда файл шаблона Word готов, создаем новую внешнею обработку в 1С, добавляем форму и в модуле формы вставляем следующий код: &НаКлиенте Процедура ПриОткрытии(Отказ) ЗаполнитьШаблонВорд(); КонецПроцедуры &НаКлиенте Функция ЗаполнитьШаблонВорд() //Попытка создать COM объект Попытка ОбъектВорд = Новый COMОбъект("Word.Application"); Исключение Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат Неопределено; КонецПопытки; //Путь к шаблону ОбъектВорд.Documents.Add("C:\Users\Константин\Desktop\Шаблон.docx"); ШаблонВорд = ОбъектВорд.ActiveDocument; //Получаем все закладки из шаблона Для каждого ЗакладкаВорд Из ШаблонВорд.Bookmarks Цикл Сообщить(ЗакладкаВорд.Name); КонецЦикла; //Заменяем закладку1 на текст ШаблонВорд.Bookmarks("Закладка1").Select(); ШаблонВорд.Application.Selection.TypeText("Текст для закладки №1."); //Заменяем закладку2 на текст ШаблонВорд.Bookmarks("Закладка2").Select(); ШаблонВорд.Application.Selection.TypeText("Текст для закладки №2."); //Заменяем закладку3 на текущую дату ШаблонВорд.Bookmarks("Закладка3").Select(); ШаблонВорд.Application.Selection.TypeText(ТекущаяДата()); ОбъектВорд.Application.Visible = Истина; ОбъектВорд.Activate(); //Закрытие документа //ОбъектВорд.Application.Quit(); КонецФункции

В результат запуска внешней обработки 1С по формированию печатной формы на основе шаблона в виде файла Word, мы получим следующий результат:

Информацию по методам COM объекта Word, а так же дополнительные данные можно узнать из MSDN .

Дополнение к заметке Использование шаблонов Word в 1С

Выражаю благодарность, всем тем, кто комментирует запись, благодаря вам, материал дополняется новыми данными и будет полезен более широкому кругу посетителей.

1. А как поменять размер шрифта во вставляемом тексте?
Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:

//Заменяем закладку3 на текущую дату ШаблонВорд.Bookmarks("Закладка3").Select(); ШаблонВорд.Application.Selection.Font.Bold = 1; ШаблонВорд.Application.Selection.Font.Size = 20; ШаблонВорд.Application.Selection.TypeText(ТекущаяДата());

2. Картинки есть возможность выгружать в шаблон?
Да, конечно. Примеры для C# и VB описаны по ссылке: https://msdn.microsoft.com/ru-ru/library/ms178792.aspx , а для 1С код будет следующий:

// Вставка изображения ШаблонВорд.Bookmarks("Закладка3").Select(); ШаблонВорд.Application.Selection.InlineShapes.AddPicture("C:\Users\Константин\Desktop\logo_1c.png");

3. При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку: «Ошибка при вызове метода контекста (Add)» в чем может быть причина?
Может попробовать изменить путь на: «C:\Шаблон.docx».

4. Подскажите пожалуйста еще почему при сохранении макета типа active document в файл word кодом:

ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); Макет = ОбработкаОбъект.ПолучитьМакет("ШаблонПисьмаПросрочка"); ИмяФайла = КаталогВременныхФайлов() + "\"файл.doc"; Макет.Записать(ИмяФайла);

Я получаю вместо нормального документа вот такой http://prntscr.com/eshgjk
Предполагаю, что метод Записать(,) по умолчанию, записывает файл в формате MXL. Попробуйте вторым параметром установить значение: ТипФайлаТабличногоДокумента.DOCX, более подробно описано в «Синтакс-помощнике».

5. У меня в документе есть ссылки на файлы которые расположены на сетевом диске. Как в шаблоне сделать гиперссылку на эти файлы?
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:

Sub Макрос1() " " Макрос1 Макрос " " Selection.MoveLeft Unit:=wdCharacter, Count:=15, Extend:=wdExtend ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _ "C:\Users\Константин\Desktop\Тест.txt", SubAddress:="", ScreenTip:="", _ TextToDisplay:="ТестоваяСсылка" End Sub

Описание метода добавления в MSDN: https://msdn.microsoft.com/en-us/vba/word-vba/articles/hyperlinks-add-method-word

Соответственно код для 1С следующий:

Функция ЗаполнитьШаблонВорд() //Попытка создать COM объект Попытка ОбъектВорд = Новый COMОбъект("Word.Application"); Исключение Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат Неопределено; КонецПопытки; //Путь к шаблону ОбъектВорд.Documents.Add("C:\Users\k.blagin\Desktop\Шаблон.docx"); ШаблонВорд = ОбъектВорд.ActiveDocument; //Получаем все ссылки из шаблона Для каждого ЗакладкаВорд Из ШаблонВорд.Hyperlinks Цикл Сообщить(ЗакладкаВорд.Name); КонецЦикла; //Меняем адрес уже существующей ссылки ШаблонВорд.Hyperlinks("Logs.zip").Address = "C:\Users\k.blagin\Desktop\Memory.zip"; //Заменяем закладку на ссылку ОбъектЗакладка = ШаблонВорд.Bookmarks("Закладка3"); ШаблонВорд.Hyperlinks.Add(ОбъектЗакладка.Range, "C:\Users\k.blagin\Desktop\Шаблон.docx", "", "Шаблон.docx", "C:\Users\k.blagin\Desktop\Шаблон.docx"); ОбъектВорд.Application.Visible = Истина; ОбъектВорд.Activate(); //Закрытие документа //ОбъектВорд.Application.Quit(); КонецФункции