1с макет word на клиенте

Содержание:

1.       Чек-лист разработки для создания внешней печатной формы

2.       Пример разработки в 1С 8.3 Зарплата и управление персоналом

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

Весь принцип реализации строиться на использовании расширения. Причем, добавлять в расширение объекты основной конфигурации практически не нужно. Это очень удобно для дальнейших обновлений конфигураций с расширениями. Возникает вопрос: «А при чем здесь внешняя печатная форма, ведь это расширение?». Дело в том, что расширение легко устанавливается в программу в пользовательском режиме. А если еще ее объекты обособленны от объектов основной конфигурации, то, я думаю, можно называть ее внешней.

Пожалуй, единственным ограничением является наличие в конфигурации Библиотеки стандартных подсистем (далее – БСП). Данный метод «активно» использует механизмы этой библиотеки, поэтому БСП должно быть интегрировано в конфигурацию информационной базы (далее – ИБ). Но здесь особо беспокоиться не нужно, т.к. БСП сейчас присутствует практически во всех типовых конфигурациях.

Перед тем как продемонстрировать пример разработки, предлагаю ознакомиться с чек-листом и представить общую последовательность действий.  

1. Чек-лист разработки для создания внешней печатной формы

1.Создать расширение в конфигурации ИБ

2.В расширении добавить новую обработку (далее Обработка)

3.Обработку включить в подсистему ПодключаемыеОтчетыИОбработки

4.Создать шаблон (документ в формате MS Word) с необходимым содержанием и установить параметры

5.В обработку добавить макет и загрузить в него файл шаблона, созданного в пункте 4

6.В обработку добавить форму и в модуле формы создать функцию:

·         ВыполнитьКомандуПечати – экспортная, пользовательская

7.В модуле менеджера обработки создать 3 процедуры и 4 функции:

·         ПриОпределенииНастроек — экспортная, предопределенная БСП

·         ДобавитьКомандыПечати — экспортная, предопределенная БСП

·         Печать — экспортная, предопределенная БСП

·         ПолучитьДанныеПечати — экспортная, предопределенная БСП

·         ПолучитьДанныеОбъекта – пользовательская

·         ОбластиМакетаОфисногоДокумента – пользовательская

·         НапечататьДокумент– пользовательская  

2. Пример разработки в 1С 8.3 Зарплата и управление персоналом

Давайте рассмотрим этот процесс на примере создания печатной формы дополнительного соглашения к трудовому договору в формате файла MS Word. В качестве информационной базы я буду использовать конфигурацию 1C 8.3 Зарплата и управление персоналом версии 3.1.14.183, установленную на платформе 1С:Предприятие 8.3 (8.3.17.1496). В данной конфигурации используется БСП версии 3.1.2.469.

1.Создаем расширение в конфигурации ИБ.

Запускаем 1С:Предприятие в режиме конфигуратора. Открываем список расширений с помощью команды «Расширения конфигурации» пункта меню «Конфигурация» и добавляем новое расширение. После добавления расширения в список, необходимо будет снять флажок «Безопасный режим» как это показано на Рис.1. Если безопасный режим оставить включенным, то при печати нашей формы программа будет «ругаться».

Расширение конфигурации в 1С 8.3 ЗУП

Рис. 1 Расширение конфигурации в 1С 8.3 Зарплата и управление персоналом

2.Добавляем в расширение новую обработку.

Делаем двойной клик по строке списка с нашим расширением и открываем конфигурацию расширения. В дереве конфигурации находим «Обработки» … выделяем … правая клавиша мышки … Добавить. Я назвал обработку «Расш1_ПечатьWord».

3. Включаем обработку в подсистему ПодключаемыеОтчетыИОбработки.

Для этого необходимо добавить в расширение подсистему ПодключаемыеОтчетыИОбработки из основной конфигурации. Переходим в окно основной конфигурации, находим подсистему ПодключаемыеОтчетыИОбработки в дереве, выделяем и через контекстное меню жмем команду «Добавить в расширение» (см. Рис.2)

Добавление в расширение в 1С 8.3 Зарплата и управление персоналом

Рис. 2 Добавление в расширение в 1С 8.3 Зарплата и управление персоналом

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

4.Создаем шаблон-документ Word с необходимым содержанием и параметрами.

На этом этапе берем шаблон доп. соглашения – документ в формате MS Word c расширением .docx, устанавливаем разделители областей вывода, а в местах, где необходимо подставить значения из базы 1С устанавливаем маркеры параметров.

Разделитель области предназначен для того, чтобы «именовать» части документа-шаблона для дальнейшего вывода средствами встроенного языка 1С. Разделители представляют собой пару — открывающий тэг {v8 Область.<Имя области>} в самом начале области документа и закрывающий тэг {/v8 Область.<Имя области>} в самом конце области документа.

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

Маркеры параметров выполняют такую же роль, как и параметры стандартных печатных макетов, и имеют следующий формат {v8 <Имя параметра>}

Документ в формате MS Word

Рис. 3 Документ в формате MS Word

5. Добавляем в обработку макет и загружаем в него файл шаблона.

Добавляем в обработку макет. Тип макета – двоичные данные. Название должно начинаться с префикса ПФ_DOC_ Для этого примера я назвал его «ПФ_DOC_ДопСоглашение».

Далее кликаем по макету печатной формы и открывается форма с кнопкой «Загрузить из файла». Загружаем наш шаблон .docx, созданный ранее(пункт 4).

6. В обработку добавляем форму.

Теперь в нашей обработке «Расш1_ПечатьWord» создаем форму. Форма должна быть основной, поэтому при создании формы важно, чтобы флажок «Назначить форму основной» был установлен.

В модуль формы копируем функцию с Рис.4

 Команда печати в 1С 8.3 Зарплата и управление персоналом

Рис. 4 Функция модуля формы в 1С 8.3 Зарплата и управление персоналом

7. В модуле менеджера обработки создадим необходимые процедуры и функции.

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

7.1 ПриОпределенииНастроек

Данная процедура является предопределенной БСП, поэтому название нужно сохранить. Изменить можно размещение (подчеркнуто красным). В моем примере команда печати должна располагаться в справочнике сотрудники.

 Команда печати в 1С 8.3 Зарплата и управление персоналом

Рис. 5 Команда печати в 1С 8.3 Зарплата и управление персоналом

7.2 ДобавитьКомандыПечати

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

печать в 1С 8.3 Зарплата и управление персоналом

Рис. 6 Добавление команды печати в 1С 8.3 Зарплата и управление персоналом

7.3 Печать

Данная процедура является предопределенной БСП поэтому название нужно сохранить. В переменную ИдентификаторКоманды и ИмяМенеджераПечати устанавливаем имя идентификатора и менеджера печати из процедуры ДобавитьКомандуПечати (пункт 7.2).

Процедура печати в 1С 8.3 Зарплата и управление персоналом

Рис. 7 Процедура печати в 1С 8.3 Зарплата и управление персоналом

7.4 ПолучитьДанныеПечати

Данная функция является предопределенной БСП поэтому название нужно сохранить. Аналогично предыдущему шагу, устанавливаем в переменную ИдентификаторКоманды имя идентификатора из процедуры ДобавитьКомандуПечати.

В параметр функции УправлениеПечатью.МакетПечатнойФормы устанавливаем полный путь к макету печатной формы, созданному в пункте 5 нашей статьи.

Получение данных объекта в 1С 8.3

Рис. 8 Получение данных печати в 1С 8.3 Зарплата и управление персоналом

7.5 ПолучитьДанныеОбъекта

В этой функции необходимо создать структуру с данными, которыми будет заполняться печатная форма. Ключ структуры – имя параметра шаблона Word {v8 <Имя параметра>}, а значение – значение из базы 1С. Параметр функции СсылкаНаОбъект – ссылка на объект печати. В нашем случае это ссылка на сотрудника.

Получение данных объекта в 1С 8.3 Зарплата и управление персоналом

Рис. 9 Получение данных объекта в 1С 8.3 Зарплата и управление персоналом

7.6 ОбластиМакетаОфисногоДокумента

Здесь описываем области и устанавливаем типы.

Возможные типы областей:

·         Общая – используется однократно.

·         СтрокаТаблицы – используется для вывода множества строк;

·         Список – используется для вывода множества строк;

·         ВерхнийКолонтитул;

·         НижнийКолонтитул;

документ в 1С 8.3 Зарплата и управление персоналом

Рис. 10 Области макета в 1С 8.3 Зарплата и управление персоналом

7.7 НапечататьДокумент

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

Функция напечатать документ в 1С 8.3 Зарплата и управление персоналом

Рис. 11 Функция напечатать документ в 1С 8.3 Зарплата и управление персоналом

На этом все. Запускаем печать и получаем ожидаемый результат.

Печать макета документа Word

Рис. 12 Печать макета документа Word

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

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

Специалист компании «Кодерлайн»

Игорь Торба

   DenYuliya

11.11.21 — 22:21

Доброго всем вечера.

подскажите пожалуйста, как реализовать следующее:

Вывожу ПФ из 1С в Word через ActiveDocument.

У меня сейчас вот так, работает нормально, но выводится либо первая строка ТЧ. если она всего одна, либо последняя, если строк ТЧ — несколько.

Я так понимаю, надо впендюрить куда-то Цикл. создать таблицу и что-то еще?

&НаКлиенте

Процедура Печать(ИдентификаторКоманды,ОбъектыНазначения) Экспорт //вместо ПечатьУведомлениеОЗадолженности(Команда)

    
    СтруктураДляЗаполнения = ПолучитьСтруктуруДляЗаполнения();

    
    Попытка

        ОбъектВорд = Новый COMОбъект(«Word.Application»);

    Исключение

        Сообщить(«Ошибка при запуске Microsoft Word: » + ОписаниеОшибки(), СтатусСообщения.Внимание);

    КонецПопытки;

    ОбъектВорд.Documents.Add(«\serv8ftpШаблоны исковЮр блок КолпиноУведомление о задолженности.docx»);

    Док = ОбъектВорд.ActiveDocument;

        
    //заполнение закладки ПолноеНаименованиеОрганизации

    Док.Bookmarks(«ПолноеНаименованиеОрганизации»).Select();

    Док.Application.Selection.TypeText(СтруктураДляЗаполнения.ПолноеНаименованиеОрганизации);

        
    //заполнение закладки ИОДолжник

    Док.Bookmarks(«ИОДолжник»).Select();

    Док.Application.Selection.TypeText(СтруктураДляЗаполнения.ИОДолжник);  

    
    //заполнение закладки АдресДомаДолжника

    Док.Bookmarks(«АдресДомаДолжника»).Select();

    Док.Application.Selection.TypeText(СтруктураДляЗаполнения.АдресДомаДолжника);

    
    //заполнение закладки СуммаЗадолженности

    Док.Bookmarks(«СуммаЗадолженности»).Select();

    Док.Application.Selection.TypeText(СтруктураДляЗаполнения.СуммаЗадолженности);

    
    //заполнение закладки СрокПогашения

    Док.Bookmarks(«СрокПогашения»).Select();

    Док.Application.Selection.TypeText(СтруктураДляЗаполнения.СрокПогашения);

    
    ОбъектВорд.Application.Visible=1;

    ОбъектВорд.Activate();

    ОбъектВорд = 0;

    ЭтаФорма.Закрыть();

    
КонецПроцедуры

   mikecool

1 — 11.11.21 — 22:47

вообще не вижу таблицы, она в шаблоне?

   DenYuliya

2 — 11.11.21 — 23:10

(1)я вообще не понимаю, как ее создать и в какой момент((((. Ее нет.

Как это сделать через ТабДок -знаю. А тут нет((((

   DenYuliya

3 — 11.11.21 — 23:17

(1) сцуко, я страшный тупень. Вопрос -то вообще по другому надо было задать, наверное.

У меня 2 задачи в голове в кашу просто((((.

Мне не ТАБЛИЦА нужна. А вывода каждой из строк табличной части в цикле.

Как бы

Для Каждой Строка Из СтруктураДляЗаполнения Цикл

///формируем новый макет ActiveDocument с новыми реквизитами, содержащимися в строке

Цикл

Ну есть у вас документ, в документе ТЧ.

Строка 1: Петя

Строка 2:Вася

Строка 3: Сережа.

Вот каждому из них должно создаться по макету. Отдельному. В первом — «Для Пети», во втором «Для Васи»….

А у меня только одна выводится.Ну понятно, потому что цикла то нет. А как его зафигачить? Скорее: в какой момент?

   DenYuliya

4 — 12.11.21 — 01:02

(1) в общем, в продолжение (3)

Вот тут в параметр СтруктураДляЗаполнения возвращается структура, заполненная данными строки ТЧ.

&НаКлиенте

Процедура Печать(ИдентификаторКоманды,ОбъектыНазначения) Экспорт //вместо ПечатьУведомлениеОЗадолженности(Команда)      

   СтруктураДляЗаполнения = ПолучитьСтруктуруДляЗаполнения();

////  дальше идет заполнение параметров Word

КонецПроцедуры;

В функции ПолучитьСтруктуруДляЗаполнения() запрос к ТЧ документа

Функция ПолучитьСтруктуруДляЗаполнения()

    
///ТУТ запрос

    ТЗ_Документа  = Запрос.Выполнить().Выгрузить();

  
  ДляКаждого Строка Из ТЗ_Документа Цикл

    СтруктураДляЗаполнения = Новый Структура;

    СтруктураДляЗаполнения.Вставить(«СуммаЗадолженности», СуммаЗадолженности);

    СтруктураДляЗаполнения.Вставить(«ИОДолжник»,  Должник);

    ///и так далее

   Возврат СтруктураДляЗаполнения;

  КонецЦикла;

КонецФункции;

В процедуре Печать() получается первая строка, печатается — и на этом все.

Как бы мне зафигачить в клиентскую процедуру Печать() цикл, обходящий все строки ТабличнойЧасти объекта и для каждой из них вызывающий печать? Или может как-то поэлегантнее можно сделать это?

Запрос на клиенте я создать не могу… Клиентскую процедуру серверной тоже сделать не могу, потому что на сервере нет ворда…

Как извратиться-то? что то я уже вообще по кругу бегаю.

   Сергиус

5 — 12.11.21 — 01:18

(4)Формируй на сервере массив структур из данных таблицы, возвращай на клиента и обходи его как хочешь

   Сергиус

6 — 12.11.21 — 01:20

+(5) У тебя в функции ПолучитьСтруктуруДляЗаполнения() нет массива, куда можно добавить данные по всем строкам, а не только по одной. Что то из серии МассивСтр.Добавить(СтруктураДляЗаполнения). Потом этот массив и возвращай

   DenYuliya

7 — 12.11.21 — 10:38

(5) короче сама сделала, всем спасибо! До 3 ночи сидела, что-то я залипла с этим вопросом, первый раз с ActiveDocument сталкиваюсь так плотно, если честно. На случай,если вдруг пригодится кому на будущее:

Есть документ, в нем есть ТЧ с данными контрагентов. Для каждого из контрагентов в ТЧ надо было сформировать отдельный макет в WORD. Самый большой «затык» был в том, что

— на сервере нет WORD, соответственно, процедура формирования/заполнения макета должна быть на клиенте.

— не понятно было, как реализовать цикл на клиенте

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

1) В модуле формы кнопка вызывает клиентскую Процедуру «Печать1».

&НаКлиенте

Процедура Печать1(Команда);    

        Должники = ПолучитьДолжников();    

    Печать(» «,Должники);    

КонецПроцедуры

2) Из нее вызываю серверную процедуру. На сервере в массив выгружаю колонку «должники» ТЧ объекта. Строки данной колонки ссылочного типа, но в массив выгружается строка!

Данный этап нужен для дальнейшей передачи с клиента в клиентскую же процедуру «Печать» и задания там цикла для построчной печати макета (для каждой строки ТЧ — свой макет WORD)

&НаСервере

Функция ПолучитьДолжников()    

    ЗначениеОбъекта = Объект.СсылкаНаОбъект.ПолучитьОбъект();

    МассивДолжников    = ЗначениеОбъекта.Должники.ВыгрузитьКолонку(«Должник»);

    
    Возврат МассивДолжников;    

КонецФункции

3) Вызываю клиентскую проц Печать(«», Должники); передаю в нее массив со значениям строк ТЧ, выгруженными на этапе 2.

4) В процедуре печать задаю цикл.

Цикл задается с самого начала, и завершается на моменте между:

                
     ОбъектВорд.Application.Visible=1;        

        КонецЦикла; ////!!!

ОбъектВорд.Activate();

ОбъектВорд = 0;

Если цикл завершить позже, макет будет перезатираться!

Для каждой строки массива вызываю получение СтруктурыДляЗаполнения. СтруктураДляЗаполнения — это вызов серверной Функции, в которой формируется запрос (с переданными в него параметрами СсылкаНаОбъект и строкой тч «Должник». Должник — это строка, из нашего массива, по которому строится цикл в процедуре печати.

&НаКлиенте

Процедура Печать(ИдентификаторКоманды,мДолжники) Экспорт

    
    ПредупреждениеДок = Объект.СсылкаНаОбъект;

    
    Для Каждого СтрДолжник Из мДолжники Цикл

        
        СтруктураДляЗаполнения = ПолучитьСтруктуруДляЗаполнения(ПредупреждениеДок, СтрДолжник);

        
        Попытка

            ОбъектВорд = Новый COMОбъект(«Word.Application»);

        Исключение

            Сообщить(«Ошибка при запуске Microsoft Word: » + ОписаниеОшибки(), СтатусСообщения.Внимание);

        КонецПопытки;

        ОбъектВорд.Documents.Add(«\serv8ftpШаблоны исковУведомление о задолженности.docx»);

        Док = ОбъектВорд.ActiveDocument;

        
        //заполнение закладки ПолноеНаименованиеОрганизации

        Док.Bookmarks(«ПолноеНаименованиеОрганизации»).Select();

        Док.Application.Selection.TypeText(СтруктураДляЗаполнения.ПолноеНаименованиеОрганизации);

        
        //заполнение закладки РеквизитыДолжника

        Док.Bookmarks(«РеквизитыДолжника»).Select();

        Док.Application.Selection.TypeText(СтруктураДляЗаполнения.РеквизитыДолжника);

        
        //заполнение закладки ИОДолжник

        Док.Bookmarks(«ИОДолжник»).Select();

        Док.Application.Selection.TypeText(СтруктураДляЗаполнения.ИОДолжник);  

        
        //заполнение закладки АдресДомаДолжника

        Док.Bookmarks(«АдресДомаДолжника»).Select();

        Док.Application.Selection.TypeText(СтруктураДляЗаполнения.АдресДомаДолжника);

        
                ///и другая куча параметров

                    
        ОбъектВорд.Application.Visible=1;

        
        КонецЦикла; //!!! тут завершаем цикл

        ОбъектВорд.Activate();

        ОбъектВорд = 0;

    
КонецПроцедуры

&НаСервере

Функция ПолучитьСтруктуруДляЗаполнения(ПредупреждениеДок,Должник)

  СтруктураДляЗаполнения = Новый Структура;

  /// здесь запрос и заполнение структуры для дальнейшего заполнение из нее непосредственно макета Word

  Возврат СтруктураДляЗаполнения;

КонецФункции

   PLUT

8 — 12.11.21 — 10:45

(7) говнокод детектед

ОбъектВорд.Documents.Add(«\serv8ftpШаблоны исковУведомление о задолженности.docx»);

   DenYuliya

9 — 12.11.21 — 12:13

(8) копипаст с ранее созданного не мною).

А не знаете, возможно же как-то сделать, чтобы илитненько выводить условно «5 макетов на 5 листах одного документа», а не 5 разных макетов? Какое-нибудь «Присоединить страницу»?

   ИУБиПовиц

10 — 12.11.21 — 13:05

Я делал — сохранял во временные файлы, пути запихивал в список значений. Затем создавал новый общий ворд документ, и в него через Selection.Range.InsertFile …iNSERTbREAK() Для новой страницы. Ну если я правильно понял Вас.

   DenYuliya

11 — 12.11.21 — 14:28

(10) мне кажется не правильно. Или я не правильно понимаю, как работает то, что делаете вы :)

Я имею в виду: вот есть у меня документ с ТЧ. В ТЧ 5 строк (5 контрагентов). Сейчас при печати выводится 5 разных макетов WORD, по 1 макету из 1 страницы на каждую из строк. Но это 5 разных экземпляров «документ WORD».

Возможно ли как-то сделать, чтобы это был 1 экземпляр «документ WORD» из 5 страниц (листов, или как правильно сказать)?

   ИУБиПовиц

12 — 12.11.21 — 15:38

:) ну может и не правильно. Но работает точно так как и вы хотите в Итоге:).

1. Формируется 5 разных экземпляров word.

2. Сохраняется во временные папки — запоминается путь, пользователю Не показывается.

3. Формируется общий пустой файл, в него методами Selection.Range.InsertFile …iNSERTbREAK() я добавляю те сформированные файлы (в п1,2).

4. Полученный один файл ворда — состоящий из 5 страниц (ну или сколько ранее сформировалось) показывается пользователю.

   DenYuliya

13 — 12.11.21 — 17:08

(12) спасибо, если 5 разных документов забракуют — попробую повторить)))

   DenYuliya

14 — 16.11.21 — 18:31

(10) а вы через ActiveDocument делали?

  

sitex

15 — 16.11.21 — 20:21

(0) Вообще дичь какая то. Создай, засунь в шаблон  свой  чтою его можно было найти  Пример >>>>>( Таб = Doc.Tables(2); потом в цикле туда добавляй ,                 Таб.Rows.Add();Таб.Cell(сч+1, 1).Range.Text ) , хот срань господню.

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

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

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

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

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

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

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

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

Установка закладки, шаблон Word для 1С

Установка закладки, шаблон Word для 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, мы получим следующий результат:

Результат использования шаблонов Word в 1С

Результат использования шаблонов Word в 1С

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

Скачать файл обработки 1С и шаблона Word.

Дополнение к заметке Использование шаблонов 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КонстантинDesktoplogo_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:Usersk.blaginDesktopШаблон.docx");
	ШаблонВорд = ОбъектВорд.ActiveDocument;
	
	//Получаем все ссылки из шаблона
	Для каждого ЗакладкаВорд Из ШаблонВорд.Hyperlinks Цикл
		Сообщить(ЗакладкаВорд.Name);		
	КонецЦикла;
	
	//Меняем адрес уже существующей ссылки
	ШаблонВорд.Hyperlinks("Logs.zip").Address = "C:Usersk.blaginDesktopMemory.zip";
	
	//Заменяем закладку на ссылку
	ОбъектЗакладка = ШаблонВорд.Bookmarks("Закладка3");
	ШаблонВорд.Hyperlinks.Add(ОбъектЗакладка.Range, "C:Usersk.blaginDesktopШаблон.docx", "", "Шаблон.docx", "C:Usersk.blaginDesktopШаблон.docx");
	
	ОбъектВорд.Application.Visible = Истина;
	ОбъектВорд.Activate();
	
	//Закрытие документа
	//ОбъектВорд.Application.Quit();
	
КонецФункции

В данной статье рассмотрим достаточно простой и удобный способ формирования документов Word из 1С. Сама по себе 1С формировать документы Word “не умеет”, и для работы с такими документами используется собственно MS Word. Поэтому вначале нужно определенным образом подготовить документ, а после загрузить его в макет двоичных данных в 1С.
Для корректной работы данного способа необходимо, чтобы на компьютере, где происходит формирование документа, был установлен MS Office. Также, документ формируется на клиенте, с тем чтобы вывести его на экран пользователю. Но возможно формирование и на сервере, если на сервере установлен Word – например, для прикрепления файлов к справочникам.

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

В документе Word можно вставлять поля специального типа DocVariables. Это можно сделать либо вставив соответствующий фрагмент текста, либо через графический интерфейс. На примере Word 2016, это делается через меню Вставка / Экспресс блоки/ Поле. В списке доступных полей нас интересует DocVariable. Указываем нужное имя и жмем ОК.

1С напечатать Word DocVariables

Для скрытия / отображения кодов полей в документе, жмем Alt + F9. Для экономии времени, можно просто копировать нужные поля и вставлять в нужные места документа. Чтобы создать новую переменную документа, достаточно просто в кавычках заменить имя.

1С сформировать Word

Формирование документа Word из 1С

После того, как шаблон готов, его нужно загрузить в виде макета с типом “Двоичные данные”. Это можно сделать в обработке, в общем макете, в справочнике и т.д. Рассмотрим на примере хранения макета в обработке.

Сперва нужно создать ComОбъект Word, сохранить файл из макета во временный файл, и прочитать его в Word. Далее мы переходим к заполнению переменных DocVariablе любым удобным способом – можно явно указывать нужные имена переменных и их значения, а можно заранее подготовить структуру данных и в цикле заполнить по этой структуре. Далее необходимо обновить поля в документе Word, скрыть коды полей, если вдруг они включены, и отобразить документ. Для доступа к конкретному полю DocVariable используется код  вида ComОбъектWord.Variables(“СтроковоеИмяПеременной”).Value. Делаем это в попытке, на случай, если поля с таким именем в Word нет.

&НаКлиенте
Процедура ВывестиДокументWord(Команда)
	МакетШаблонWord = ПолучитьМакетНаСервере();	
	ОбъектWord = Новый COMОбъект("Word.Application");	
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
	МакетШаблонWord.Записать(ИмяВременногоФайла);
	ДокументWord = ОбъектWord.Documents.Add(ИмяВременногоФайла);	
	//Удобнее всего заполнять через структуру
	СтруктураДанных = Новый структура("ДатаДокумента, ТекстИз1С", Формат(ТекущаяДата(),"ДЛФ=DD"), "Какой-то текст из 1С");
	Для Каждого КлючИЗначение Из СтруктураДанных Цикл
		Попытка 
			ДокументWord.Variables(КлючИЗначение.Ключ).Value = КлючИЗначение.Значение;
		Исключение
		КонецПопытки;
	КонецЦикла;
	
	ДокументWord.Fields.Update();
	ОбъектWord.ActiveWindow.View.ShowFieldCodes = False;
	ОбъектWord.Visible = True;	
КонецПроцедуры

&НаСервере
Функция ПолучитьМакетНаСервере()
	
	Возврат РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
	
КонецФункции

ВНИМАНИЕ! При использовании кодов описанных ниже, уберите символ _


Давайте рассмотрим на примерах как это делается! =) Мне известно 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(НарушенияТекст);

//открыть Word часть 4
СсылкаМакет.Application.Visible = Истина;

СсылкаМакет.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 = Истина;

Ну вот и все =)
Автор: saylolpls


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

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

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

Код 1C v 8.х

 Процедура ОсновныеДействияФормыWord(Кнопка)
АктивныйДокумент = ПолучитьМакет("Макет");
КомОбъект = АктивныйДокумент.Получить();

КомОбъект.Application.Visible=1;
КомОбъект.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;

КонецФункции

Демонстрация процесса формирования внешней печатной формы документа из макета Word средствами БСП, колонтитулы, коллекции, и обычные параметры

Функция СведенияОВнешнейОбработке() Экспорт
	
	// Стандартное описание сведений о внешней печатной форме

	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	
	ПараметрыРегистрации.БезопасныйРежим = Ложь;
	ПараметрыРегистрации.Вставить("Версия", "1.0");
	ПараметрыРегистрации.Наименование = "Название печатной формы";
	
	ПараметрыРегистрации.Назначение.Добавить("Справочник.ФизическиеЛица");
	
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = "Название команды";   //Синоним
	НоваяКоманда.Идентификатор = "НазваниеКоманды";   //ПолноеИмя
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
		
	Возврат ПараметрыРегистрации;
	
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	// Просто передаем управление дальше если удовлетворяет условию

	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "НазваниеКоманды") Тогда
		ПечатьДокумента(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати);
	КонецЕсли;
	
КонецПроцедуры

Процедура ПечатьДокумента(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати) Экспорт
	
	 // Сначала получим данные а потом передадим их для заполнения макета
		
	МассивДанныхЗаполнения = ПолучитьДанныеДляПечатиДокумента(МассивОбъектов);	
		
	ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, МассивДанныхЗаполнения, ОбъектыПечати);
		
КонецПроцедуры 

Функция ПолучитьДанныеДляПечатиДокумента(МассивОбъектов)

	// здесь происходит заполнение данными для ПФ

	Данные = Новый Структура;
	Данные.Вставить("Организация", "ООО ""Рога и копыта""");
	Данные.Вставить("Контрагент", "ИП Иванов");
	Данные.Вставить("СуммаОплаты", 10523);    
	Данные.Вставить("Дата", '202110102158');  
	
	ТаблицаДанных = Новый ТаблицаЗначений;
	ТаблицаДанных.Колонки.Добавить("Номенклатура");
	ТаблицаДанных.Колонки.Добавить("Количество");
	ТаблицаДанных.Колонки.Добавить("Сумма");

	Строка = ТаблицаДанных.Добавить();
	Строка.Номенклатура = "тест";
	Строка.Количество = 2;
	Строка.Сумма = 50;
	
	Строка = ТаблицаДанных.Добавить();
	Строка.Номенклатура = "тест1";
	Строка.Количество = 3;
	Строка.Сумма = 55;
	
	Строка = ТаблицаДанных.Добавить();
	Строка.Номенклатура = "тест2";
	Строка.Количество = 4;
	Строка.Сумма = 51; 
	
	ТаблицаДанныхВМассиве = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаДанных);
	
	Данные.Вставить("ТаблицаДанных", ТаблицаДанныхВМассиве);
	
	Возврат Данные;
	
КонецФункции 

Процедура ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, МассивДанныхЗаполнения, ОбъектыПечати)

	ДвоичныеДанныеМакета = ПолучитьМакет("ПФ_DOC_НазваниеМакета");
	
	Если ДвоичныеДанныеМакета <> Неопределено Тогда
		
		// Инициализируем печатную форму	
		
		ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "НазваниеКоманды");
		
		// Наличие пустого табличного документа в коллекции обязательно
		
		ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
		
		Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакета,Неопределено);
		ПечатнаяФормаДокумента = УправлениеПечатью.ИнициализироватьПечатнуюФорму(Неопределено, Макет.НастройкиСтраницыМакета, Макет);		
		
		// Определим какие области в документе Word хотим заполнить 
		// Для этого у нас документ должен быть размечен конструкциями 
		// {v8 Область.НазваниеОбласти} 
		// {/v8 Область.НазваниеОбласти}
		// наличие областей обязательно
		
		// Область для заполнения обычных параметров в тексте
		
		ОбластьЗаголовок = Новый Структура;
		ОбластьЗаголовок.Вставить("ИмяОбласти", "Заголовок");
		ОбластьЗаголовок.Вставить("ТипОбласти", "Общая");
		
		// Пример определения областей коллекций (таблица и нумерованный или обычный списки)	
		ОбластьШапкаТаблицы = Новый Структура;
		ОбластьШапкаТаблицы.Вставить("ИмяОбласти", "ШапкаТаблицы");
		ОбластьШапкаТаблицы.Вставить("ТипОбласти", "Общая");
		
		ОбластьСтрокаТаблицы = Новый Структура;
		ОбластьСтрокаТаблицы.Вставить("ИмяОбласти", "СтрокаТаблицы");
		ОбластьСтрокаТаблицы.Вставить("ТипОбласти", "СтрокаТаблицы");
		
		// Область должна быть определена первым элементом списка 
		// {v8 Область.НумерованныйСписок}
		// 1.{v8 Номенклатура}
		// {/v8 Область.НумерованныйСписок}
		
		ОбластьНумерованныйСписка = Новый Структура;
		ОбластьНумерованныйСписка.Вставить("ИмяОбласти", "НумерованныйСписок");  
		ОбластьНумерованныйСписка.Вставить("ТипОбласти", "Список");
		
		// Область должна быть определена первым элементом списка 
		// {v8 Область.МаркированныйСписок}
		// • {v8 Номенклатура}
		// {/v8 Область.МаркированныйСписок}
		
		ОбластьМаркированногоСписка = Новый Структура;
		ОбластьМаркированногоСписка.Вставить("ИмяОбласти", "МаркированныйСписок");
		ОбластьМаркированногоСписка.Вставить("ТипОбласти", "Список"); 
		
		// Пример определения областей колонтитулов, эти области в документе есть по умолчанию, 
		// если колонтитулы определены в самом документе
		
		ОбластьВерхнийКолонтитул = Новый Структура;
		ОбластьВерхнийКолонтитул.Вставить("ИмяОбласти", "ВерхнийКолонтитул");
		ОбластьВерхнийКолонтитул.Вставить("ТипОбласти", "ВерхнийКолонтитул");
		
		ОбластьНижнийКолонтитул = Новый Структура;
		ОбластьНижнийКолонтитул.Вставить("ИмяОбласти", "НижнийКолонтитул");
		ОбластьНижнийКолонтитул.Вставить("ТипОбласти", "НижнийКолонтитул");
		
		// Передаем данные заполнения для заполнения печатной формы 
		// Имена параметров данных заполнения должны совпадать с размеченными параметрами в документе в виде  
		// {v8 НазваниеПараметра}
		
		Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьЗаголовок);
		УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения, Ложь); 
		
		
		Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьВерхнийКолонтитул);  
		УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения);
		
		Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьНижнийКолонтитул);
		УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения); 
		
		Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьШапкаТаблицы);
		УправлениеПечатью.ПрисоединитьОбласть(ПечатнаяФормаДокумента, Область, Ложь);
		
		Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьСтрокаТаблицы);
		УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения.ТаблицаДанных); 
		
		Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьНумерованныйСписка);
		УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения.ТаблицаДанных);
		
		Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьМаркированногоСписка);
		УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения.ТаблицаДанных);
		
		// Поместим получившийся документ в коллекцию печатных форм, в раздел ОфисныеДокументы
		// так БСП поймет что нужно открывать Word при формировании печатной формы
		
		АдресХранилищаОфисныйДокумент = УправлениеПечатью.СформироватьДокумент(ПечатнаяФормаДокумента);
		УправлениеПечатью.ОчиститьСсылки(ПечатнаяФормаДокумента, Ложь);
		УправлениеПечатью.ОчиститьСсылки(Макет);
		
		ОфисныеДокументы = Новый Соответствие;
		
		ОфисныеДокументы.Вставить(АдресХранилищаОфисныйДокумент, НСтр("ru = 'Название документа'"));
		
		ПечатнаяФорма.СинонимМакета    = НСтр("ru = 'Название документа (документ Microsoft Word)'");
		ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы;
		
	КонецЕсли;
	
КонецПроцедуры

Комментарии

Like this post? Please share to your friends:
  • 1с макет active document word
  • 1с как табличную часть сохранить в excel
  • 1с как сохранить только группировки в excel
  • 1с как сохранить таблицу значений в файл excel
  • 1с как сохранить справочник в excel