К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как в 1С открыть Word: рабочие способы и готовый код

Как открыть документ Word из 1С: через COMОбъект, НачатьЗапускПриложения и ЗапуститьПриложение. Готовый код, настройка прав, типичные ошибки и их решение.

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

Самый надёжный вариант для клиент-серверной работы — использование объекта COMОбъект("Word.Application") на стороне клиента. Он позволяет не только открыть файл, но и подставить значения в закладки, заменить текст и сохранить результат. Для простого показа готового файла достаточно метода ЗапуститьПриложение() или НачатьЗапускПриложения(), которые передают документ операционной системе, и тот открывается ассоциированной программой.

Важно понимать ограничения: COM-технология работает только под Windows и требует установленного Microsoft Word на том компьютере, где выполняется код. В веб-клиенте и на Linux-сервере COM-объекты недоступны, поэтому там применяют передачу файла пользователю через временное хранилище или формирование документа в формате HTML/PDF.

Какой способ выбрать под свою задачу

Прежде чем писать код, определите сценарий. Если нужно просто показать пользователю готовый документ, сохранённый на диске или полученный из базы, — достаточно запуска файла средствами ОС. Если требуется подставить в шаблон ФИО, суммы, даты и реквизиты из документа 1С — понадобится COM-объект с доступом к закладкам или поиску и замене текста.

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

Сравнение способов

ЗапуститьПриложение(ПутьКФайлу)

Подходит для простого показа файла. Работает в тонком клиенте, не требует знания объектной модели Word. Ограничение: нельзя программно заполнить документ.

COMОбъект("Word.Application")

Полный контроль: закладки, замена текста, сохранение. Ограничение: только Windows, только там где выполняется код, нужен установленный Word.

Передача файла через ПолучитьФайл

Для веб-клиента и тонкого клиента без COM. Файл скачивается, пользователь открывает его сам. Нет автоматизации заполнения.

Открытие файла Word через ЗапуститьПриложение

Это минимальный по коду способ. Платформа передаёт путь операционной системе, и Windows открывает файл той программой, которая назначена для расширения .doc или .docx. Если Word установлен — откроется он, если нет — система предложит выбрать приложение.

Пример кода для тонкого клиента:

&НаКлиенте

Процедура ОткрытьДокумент(Команда)

ПутьКФайлу = "C:\Шаблоны\Договор.docx";

Файл = Новый Файл(ПутьКФайлу);

Если Не Файл.Существует() Тогда

Сообщить("Файл не найден: " + ПутьКФайлу);

Возврат;

КонецЕсли;

ЗапуститьПриложение(ПутьКФайлу);

КонецПроцедуры

Обратите внимание на проверку существования файла: без неё при отсутствии файла пользователь получит невнятную ошибку системы. В асинхронном режиме (модальность запрещена) используйте НачатьЗапускПриложения() с описанием оповещения.

Открытие файла, хранящегося в базе

Если шаблон лежит в справочнике или присоединённых файлах, сначала выгрузите его во временный каталог, затем запустите:

&НаКлиенте

Процедура ОткрытьИзБазы(Команда)

Адрес = ПолучитьАдресФайлаНаСервере(); // двоичные данные во временном хранилище

ВременныйФайл = ПолучитьИмяВременногоФайла("docx");

Данные = ПолучитьИзВременногоХранилища(Адрес);

Данные.Записать(ВременныйФайл);

ЗапуститьПриложение(ВременныйФайл);

КонецПроцедуры

Открытие Word через COMОбъект с заполнением шаблона

COM-подключение даёт полный доступ к объектной модели Word. Типовой сценарий: открыть шаблон, найти закладки или текстовые метки, подставить значения, показать документ пользователю или сохранить его.

&НаКлиенте

Процедура ЗаполнитьДоговор(Команда)

Попытка

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

Исключение

Сообщить("Не удалось запустить Word. Проверьте, что он установлен.");

Возврат;

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

Word.Visible = Истина;

Документ = Word.Documents.Open("C:\Шаблоны\Договор.docx");

// Заполнение закладки

Если Документ.Bookmarks.Exists("Контрагент") Тогда

Документ.Bookmarks("Контрагент").Range.Text = НаименованиеКонтрагента;

КонецЕсли;

// Поиск и замена текстовой метки

Поиск = Документ.Content.Find;

Поиск.Text = "[ДатаДоговора]";

Поиск.Replacement.Text = Формат(ДатаДоговора, "ДЛФ=D");

Поиск.Execute(,,,,,,,,,,Истина); // Replace = wdReplaceAll

КонецПроцедуры

Установка Word.Visible = Истина показывает окно Word пользователю. Если оставить его скрытым, обязательно корректно закройте приложение после работы: Документ.Close() и Word.Quit(), иначе в диспетчере задач накапливаются зависшие процессы WINWORD.EXE.

Настройка прав и типичные ошибки COM

Самая частая ошибка — «Недопустимая строка с указанием класса» при создании COMОбъект. Она означает, что Word не установлен на компьютере, либо повреждена его регистрация в системе, либо разрядность процесса не совпадает с разрядностью Office. Проверьте, что Word реально установлен и запускается вручную.

Вторая группа проблем — антивирусы и политики безопасности, блокирующие создание COM-объектов. В этом случае код падает с ошибкой доступа. Также в файловых базах с разделением прав убедитесь, что у пользователя есть право на запуск внешних приложений, если оно ограничено профилем группы доступа.

Типичные ошибки
01
Создание COMОбъект("Word.Application") на сервере — приводит к падению рабочего процесса и требует Office на сервере. Выносите код в клиентский контекст.
02
Отсутствие Word.Quit() при скрытой работе — накапливаются зависшие процессы WINWORD.EXE, память растёт, файлы остаются заблокированными.
03
Открытие шаблона напрямую вместо копии — пользователь случайно сохраняет изменения в шаблон. Открывайте копию файла или шаблон в режиме чтения.
04
Игнорирование разрядности: 64-битный клиент 1С и 32-битный Office обычно совместимы через COM, но при ошибках регистрации класса стоит проверить соответствие версий.

Открытие Word в веб-клиенте и на Linux

В веб-клиенте COM-технология недоступна. Рабочий вариант — сформировать документ на сервере (например, заполнить макет табличного документа или использовать готовый docx-файл из хранилища), поместить его во временное хранилище и вызвать ПолучитьФайл(). Браузер скачает файл, и пользователь откроет его локально установленным Word.

Для серверов на Linux и сценариев без Office вообще есть альтернатива: заполнение docx-шаблона как zip-архива с заменой XML внутри документа. Это требует аккуратной работы со структурой файла, но не зависит от платформы и не требует лицензий Office. Также можно формировать печатные формы в PDF через табличный документ — это полностью кроссплатформенно.

Маршрут решения

Как выбрать действие

Нужно просто показать готовый файл пользователю WindowsИспользуйте ЗапуститьПриложение() или НачатьЗапускПриложения() с путём к файлу
Нужно заполнить шаблон данными из 1С на Windows-клиентеИспользуйте COMОбъект("Word.Application") с закладками или поиском и заменой
Пользователи работают в веб-клиенте или на LinuxФормируйте файл на сервере и отдавайте через ПолучитьФайл, либо заполняйте docx как zip-архив
Документ не требует редактирования пользователемОткажитесь от Word в пользу табличного документа и сохранения в PDF

Проверка результата после внедрения

После добавления кода проверьте сценарий в условиях, близких к боевым: под учётной записью обычного пользователя, а не администратора; на компьютере без прав на запись в системные каталоги; с реальным шаблоном, а не тестовым файлом на рабочем столе разработчика.

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

Контрольные точки

Как проверить результат

Поведение при открытии
Норма

Word открывается с нужным документом, данные подставлены корректно

Тревожный признак

Ошибка создания COM-объекта или пустой документ

Процессы после закрытия
Норма

WINWORD.EXE завершается вместе с документом

Тревожный признак

Процессы накапливаются в диспетчере задач

Повторное открытие
Норма

Файл открывается повторно без ошибки блокировки

Тревожный признак

Сообщение, что файл занят другим приложением

Шаблон
Норма

Исходный шаблон не изменяется после работы пользователей

Тревожный признак

В шаблоне появляются данные прошлых документов

Часто задаваемые вопросы

Можно ли открыть Word из 1С без установленного Microsoft Office?

Напрямую через COM — нет. Альтернативы: передать файл пользователю через ПолучитьФайл (откроется любой программой для docx, включая LibreOffice), сформировать PDF вместо Word или программно редактировать docx как zip-архив с XML внутри.

Почему возникает ошибка «Недопустимая строка с указанием класса»?

Чаще всего Word не установлен на компьютере, где выполняется код, либо повреждена его регистрация в реестре. Проверьте запуск Word вручную и переустановите Office при необходимости. Также убедитесь, что код выполняется на клиенте, а не на сервере без Office.

Как открыть документ Word только для чтения?

При открытии через COM используйте параметр ReadOnly: Документ = Word.Documents.Open(Путь, , Истина). При запуске через ЗапуститьПриложение можно предварительно установить файлу атрибут «только чтение» средствами объекта Файл.

Работает ли COMОбъект с Word в 1С:Fresh и других облачных сервисах?

Нет, в облачных решениях создание COM-объектов на стороне сервиса запрещено моделью безопасности. Используйте формирование файла на сервере и передачу его пользователю через временное хранилище.

Как заполнить таблицу внутри документа Word из 1С?

Через COM обратитесь к коллекции Tables документа: Документ.Tables(1).Cell(Строка, Колонка).Range.Text = Значение. Для динамического числа строк сначала добавьте их методом Rows.Add(). Удобнее заранее разметить шаблон закладками в нужных ячейках.

Почему после работы кода остаются процессы WINWORD.EXE?

Код не вызывает Word.Quit() или выполнение прерывается ошибкой до закрытия. Оборачивайте работу с документом в Попытка/Исключение и в блоке Исключение тоже закрывайте документ и приложение, чтобы процесс не зависал.

Итог

Что важно запомнить

Для простого показа файла используйте ЗапуститьПриложение, для заполнения шаблона — COMОбъект("Word.Application") на клиенте. Всегда проверяйте наличие файла и Word, закрывайте приложение после работы и не выполняйте COM-вызовы на сервере. Для веб-клиента и Linux применяйте передачу файла или PDF.