Механизм печати в 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
Первая ошибка, с которой Вы, скорее всего, столкнетесь, будет примерно такой:
Для того, чтобы ее избежать, нужно на сервере 1С, пользователю USR1CV8 (или тому пользователю, под которым запущен процесс 1С-сервера),
дать права на создание, активацию и использование COM-объектов.
Сделать это можно с помощью консоли "Службы компонентов".
Как открыть эту консоль я рассказывать не буду, т.к. в разных версиях Windows это делается по разному.
А вот как в этой консоли дать соответствующие права - покажу.
Делать это нужно на компьютере, где запускается рабочий процесс сервера 1С.
Настройка DCOM
Скачать: Видео в формате MPEG 4 (.mp4) 1280x720 (6 МБ) Видео в формате WebM (.webm) 1280x720 (7 МБ) Видео в формате Ogg (.ogv) 1280x720 (21 МБ)
Предоставление пользователю USR1CV8 возможности пользоваться интерфейсом
Следующая ошибка, с которой Вы, скорее всего, столкнетесь, будет примерно такой:
Оказывается, при создании COM-объекта Word.Application, последний, в отличие от Excel.Application, пытается что-то делать на уровне пользовательского интерфейса Windows. А как известно, создаваемый при установке 1С-сервера пользователь USR1CV8 создается без возможности входа в систему, а значит и без возможности использовать пользовательский интерфейс Windows.
Чтобы преодолеть эту трудность нужно:
-
Создать папки (начало пути может отличаться, если Windows установлена в папку, отличную от "C:\Windows"):
- C:\Windows\SysWOW64\config\systemprofile\Desktop
- C:\Windows\System32\config\systemprofile\Desktop
-
И дать пользователю 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 КБ)