Механизм печати в Word

Введение

Иногда, в организациях, с помощью MS Word, разрабатывают красивые шаблоны документов, и хотят, чтобы можно было печатать в них документы из 1С, заполняя заранее подготовленные в шаблоне поля. Чаще всего это касается печати договоров с клиентами, но иногда бывают случаи печати и других документов (счета, акты и т.п.).

Данная задача легко решается работой с документами Word через механизмы Word.Application.

При этом, обычно, работа с шаблонным документом ограничивается только работой с текстовым содержимым документа. И для обозначения в документе полей, в которые нужно подставить значения из 1С, используют специальные текстовые маркеры. Например такие как "[Дата]", "[Организация]", "[Клиент]" и т.п.

Существенным недостатком такого подхода является то, что в тексте документа нельзя использовать последовательности символов, соответствующие текстовым маркерам.

Когда же речь идет о выводе в документ Word таблиц, то тут вообще мало того, что решений предлагается крайне мало, так они еще и одно "удивительнее" другого.

Так как меня такие решения не устраивают, то пришлось предложить простое универсальное решение, использующее больше возможностей Word.Application. А именно, задействовующее механизм пользовательских свойств документа, а также механизм работы с таблицами.

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

Описание

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

ОбменMSWordКлиент

Расположение:

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

ОбменMSWordКлиентСервер
(в предыдущей версии назывался ОбменMSWord)

Расположение:

Предоставляет две экспортных функции.

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

Ограничения

Библиотека реализована таким образом, чтобы не зависеть от способов настройки сопоставления полей в шаблоне документа с данными в базе 1С.
Механизмы такой настройки необходимо реализовывать отдельно.
Это могут быть прямо в коде жестко прописанные имена полей и алгоритмы получения информации для их заполнения. А может быть сложная структура справочников, с помощью которой можно формировать выражения извлечения необходимых данных из базы 1С и сопоставления их с полями и таблицами шаблонного документа.
Естественно, что возможно еще множество промежуточных вариантов - кому как удобнее.

Предоставляемые библиотекой функции оперируют соответствием именованных полей и соответствием таблиц значений.

Неприятным ограничением является то, что библиотека умеет заполнять только "плоские" таблицы. Т.е. таблицы, в которых нет объединенных колонок, а каждая колонка - отдельно.

Примеры поддерживаемого формата таблиц

Пример настройки шаблонного документа Word

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

Как это сделать - показано в следующих видео-инструкциях:

Добавление пользовательских полей в документ

Скачать:  Видео в формате MPEG 4 (.mp4) 1280x720 (20 МБ)  Видео в формате WebM (.webm) 1280x720 (22 МБ)  Видео в формате Ogg (.ogv) 1280x720 (69 МБ)

Настройка таблиц в документе

Скачать:  Видео в формате MPEG 4 (.mp4) 1280x720 (21 МБ)  Видео в формате WebM (.webm) 1280x720 (24 МБ)  Видео в формате Ogg (.ogv) 1280x720 (75 МБ)

Танцы с бубном

Обычно, при использовании COM-объекта Word.Application на стороне клиенской части 1С - проблем не возникает. Но они возникают при попытках использования этого объекта в контексте 1С сервера.
Для того, чтобы из серверного контекста 1С можно было работать с документами Word через механизмы COM, а именно с помощью COM-объекта Word.Application, необходимо выполнить ряд настроек в операционной системе.
Данные в этом разделе рекомендации необходимо выполнять не только при использовании описываемого здесь механизма, но и при использовании других механизмов, использующих возможности Word.Application.

Настройка DCOM

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

Пример ошибки при работе с Word.Application: (0x80070005): Отказано в доступе

Для того, чтобы ее избежать, нужно на сервере 1С, пользователю USR1CV8 (или тому пользователю, под которым запущен процесс 1С-сервера), дать права на создание, активацию и использование COM-объектов.
Сделать это можно с помощью консоли "Службы компонентов".
Как открыть эту консоль я рассказывать не буду, т.к. в разных версиях Windows это делается по разному. А вот как в этой консоли дать соответствующие права - покажу.
Делать это нужно на компьютере, где запускается рабочий процесс сервера 1С.

Настройка DCOM

Скачать:  Видео в формате MPEG 4 (.mp4) 1280x720 (6 МБ)  Видео в формате WebM (.webm) 1280x720 (7 МБ)  Видео в формате Ogg (.ogv) 1280x720 (21 МБ)

Предоставление пользователю USR1CV8 возможности пользоваться интерфейсом

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

Пример ошибки при работе с Word.Application: (0x80080005): Ошибка при выполнении приложения-сервера

Оказывается, при создании COM-объекта Word.Application, последний, в отличие от Excel.Application, пытается что-то делать на уровне пользовательского интерфейса Windows. А как известно, создаваемый при установке 1С-сервера пользователь USR1CV8 создается без возможности входа в систему, а значит и без возможности использовать пользовательский интерфейс Windows.

Чтобы преодолеть эту трудность нужно:

  1. Создать папки (начало пути может отличаться, если Windows установлена в папку, отличную от "C:\Windows"):
    • C:\Windows\SysWOW64\config\systemprofile\Desktop
    • C:\Windows\System32\config\systemprofile\Desktop
  2. И дать пользователю USR1CV8 полный доступ на эти папки, а также на папку "systemprofile":
    • C:\Windows\SysWOW64\config\systemprofile
    • (не обязательно - это если прав на предыдущую папку будет недостаточно) C:\Windows\System32\config\systemprofile

Пример использования

В составе конфигурации присутствует обработка Тест_ОбменMSWord_ШаблонЗаполнить.
Я разрабатывал ее для того, чтобы иметь возможность протестировать разработанный механизм. Поэтому ее интерфейс оставляет желать лучшего. Особенно в области работы с данными для выводимых в документ таблиц. Но для демонстрации возможностей она нам вполне подойдет.

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

Пример использования

Скачать:  Видео в формате MPEG 4 (.mp4) 1280x720 (16 МБ)  Видео в формате WebM (.webm) 1280x720 (29 МБ)  Видео в формате Ogg (.ogv) 1280x720 (86 МБ)

Поставка

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

На случай, если у кого-то возникнут проблемы с открытием файла cf, сохранил тексты модулей в текстовые файлы, а обработку - в файл внешней обработки.

Лицензия

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

Файлы для скачивания

Файл конфигурации (формата 8.3.13.1690) (22 КБ)
Текст модуля ОбменMSWordКлиент.txt (5 КБ)
Текст модуля ОбменMSWordКлиентСервер.txt (24 КБ)
Пример шаблонного документа Word (19 КБ)
Внешняя обработка с примером использования механизма (12 КБ)