При автоматизации документооборота в 1С часто возникает задача вывода печатных форм в формате Microsoft Word. Рассмотрим, как реализовать этот процесс в Управление торговлей 10.3, используя технологию закладок (Bookmarks) и объектную модель COM.
Прежде чем приступать к написанию кода, необходимо подготовить шаблон документа. Для этого выполните следующие действия:
Microsoft Word и оформите его так, как должна выглядеть ваша печатная форма..doc или .dot) и загрузите его в макеты конфигурации 1С.Для взаимодействия с Word мы будем использовать COM-объект. Основная сложность, с которой сталкиваются разработчики, заключается в правильной последовательности перехода к закладке и вставки текста. Если вы попытаетесь выбрать все закладки сразу, а затем вставить в них значения, данные могут «схлопнуться» в одном месте. Поэтому важно соблюдать принцип: «выбрали закладку — вставили текст».
Рассмотрим пример программного кода, который необходимо разместить в процедуре печати вашей обработки:
// Получаем макет из конфигурации
СсылкаМакет = ПолучитьОбщийМакет("ДоговорПечатиВЗаказе");
Word = СсылкаМакет.Получить();
// Активируем документ Word
ДокументWord = Word.Application.Documents(1);
ДокументWord.Activate();
// Последовательное заполнение закладок
Word.Bookmarks("ДатаДоговора").Select();
Word.Application.Selection.TypeText(Формат(ДатаДоговора, "ДЛФ=Д"));
Word.Bookmarks("ПолноеНаименование").Select();
Word.Application.Selection.TypeText(НаименованиеПолное);
Word.Bookmarks("Основание").Select();
Word.Application.Selection.TypeText(ОснованиеИП);
Word.Bookmarks("Выданного").Select();
Word.Application.Selection.TypeText(Выданного);
// Делаем документ видимым для пользователя
Word.Application.Visible = Истина;
При работе с ActiveDocument важно учитывать несколько технических аспектов:
Word.Application является COM-объектом. Он должен запускаться на стороне клиента (на компьютере пользователя). Выполнение этого кода на сервере 1С приведет к ошибке, так как сервер не имеет доступа к графическому интерфейсу и установленному офисному пакету.Find/Replace (поиск и замену текста в шаблоне) или DocVariable. Метод закладок считается наиболее надежным для фиксированных полей.ДокументWord.SaveAs("путь_к_файлу") после заполнения данных. Рекомендуется использовать метод ПолучитьИмяВременногоФайла("doc") для формирования уникальных имен в профиле пользователя.Использование метода Selection.TypeText позволяет эффективно заполнять стандартные шаблоны. Если в процессе работы текст накладывается друг на друга, проверьте, не пропущены ли команды Select() для каждой конкретной закладки. Если же структура документа предполагает динамическое добавление строк (например, табличная часть документа), работа с закладками может стать громоздкой — в таких случаях эффективнее использовать встроенный ТабличныйДокумент с настроенными шрифтами, имитирующими стиль Word.
Для более сложных задач в современных конфигурациях рекомендуется использовать механизмы БСП (Библиотека стандартных подсистем), а именно «Управление печатью», что позволяет унифицировать подключение печатных форм и избежать прямого взаимодействия с COM-объектами.