рубрики: Word | Дата: 3 июля, 2016
Зачастую при выводе на печать из 1С требуется выводить информацию не в стандартный формат 1С — *.mxl, а в документ Word.
В этой статье будет рассмотрено создание и использование шаблонов Word для печати из 1С.
Приступим.
Первым делом создадим шаблон документа 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;
УдалитьФайлы(ИмяФайла);
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие(Кнопка)
ПечатьИзМакета();
КонецПроцедуры
И в заключение хочется отметить, что вышеприведенный код можно использовать и для тонкого клиента.
Добавить комментарий