Профессия — 1С » Шаблоны Word

Профессия — 1С

Рукопашный бой Карташ

Категории

-->

Шаблоны Word

рубрики: Word | Дата: 3 июля, 2016

Зачастую при выводе на печать из требуется выводить информацию не в стандартный формат — *.mxl, а в документ Word.
В этой статье будет рассмотрено создание и использование шаблонов Word для печати из .
Приступим.

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

[Заголовок]
Здесь основной текст
[Дополнение]        

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

ШаблонВорд_ВЗ
Получившийся файл сохраню под именем D:\musor\Test.docx.

Подключаться к шаблону будем с использованием COM соединения
и далее подменять текст закладок (параметров) на нужный нам с использованием свойств и методов VBA приложения Word.
Создадим новую обработку (для толстого клиента), добавим форму и вставим в модуль формы следующий код:



Процедура ВставитьТекстВОбластьДокумента(парам_ДокументВорд, парам_ИмяОбласти, парам_Текст)
	
    ОбластьВорд	= парам_ДокументВорд.Bookmarks(парам_ИмяОбласти).Range();
    ОбластьВорд.Text	= парам_Текст;
	
КонецПроцедуры

Процедура ПечатьИзФайла()
	
    ИмяФайла = "D:\musor\Test.docx";

    Попытка

        СОМОбъект = Новый COMОбъект("Word.Application");

    Исключение

        Сообщить("Не удалось открыть приложение ""Word""");
        Возврат;

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

    Заголовок	= "Это заголовок";
    Дополнение	= "Здесь содержится дополнительная информация";

    Попытка

        ДокументВорд = СОМОбъект.Documents.Add(ИмяФайла);

        ВставитьТекстВОбластьДокумента(ДокументВорд, "Заголовок",	Заголовок);
        ВставитьТекстВОбластьДокумента(ДокументВорд, "Дополнение",	Дополнение);

    Исключение

        СОМОбъект.Quit(0);
        Сообщить("Ошибка при заполнении шаблона документа");
        Возврат;

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

    СОМОбъект.Visible = 1;
	
КонецПроцедуры

Процедура КнопкаВыполнитьНажатие(Кнопка)
	
    ПечатьИзФайла();
	
КонецПроцедуры

В общем то все достаточно просто. Подмена параметров на нужный нам текст осуществляется в процедуре ВставитьТекстВОбластьДокумента()

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

Результат_ВЗ

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



Процедура ВставитьТекстВОбластьДокумента(парам_ДокументВорд, парам_ИмяОбласти, парам_Текст)
	
    ОбластьВорд	= парам_ДокументВорд.Bookmarks(парам_ИмяОбласти).Range();
    ОбластьВорд.Text	= парам_Текст;
	
КонецПроцедуры

Процедура ПечатьИзМакета()
	
    ДвоичныеДанныеМакета	= ПолучитьМакет("Test");
    ИмяФайла	= ПолучитьИмяВременногоФайла("docx");
    ДвоичныеДанныеМакета.Записать(ИмяФайла);

    Попытка

        СОМОбъект = Новый COMОбъект("Word.Application");

    Исключение

        Сообщить("Не удалось открыть приложение ""Word""");
        Возврат;

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

    Заголовок	= "Это заголовок";
    Дополнение	= "Здесь содержится дополнительная информация";

    Попытка

        ДокументВорд = СОМОбъект.Documents.Add(ИмяФайла);

        ВставитьТекстВОбластьДокумента(ДокументВорд, "Заголовок",	Заголовок);
        ВставитьТекстВОбластьДокумента(ДокументВорд, "Дополнение",	Дополнение);

    Исключение

        СОМОбъект.Quit(0);
        Сообщить("Ошибка при заполнении шаблона документа");
        Возврат;

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

    СОМОбъект.Visible = 1;
    УдалитьФайлы(ИмяФайла);
	
КонецПроцедуры

Процедура КнопкаВыполнитьНажатие(Кнопка)
	
    ПечатьИзМакета();
	
КонецПроцедуры

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

   

2014 - 2023г. Профессия — 1С. Обмен опытом по программированию в 1С