Разработка и Конфигурация · 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. Ограничение: нельзя программно заполнить документ.
Полный контроль: закладки, замена текста, сохранение. Ограничение: только 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-объектов. В этом случае код падает с ошибкой доступа. Также в файловых базах с разделением прав убедитесь, что у пользователя есть право на запуск внешних приложений, если оно ограничено профилем группы доступа.
Открытие Word в веб-клиенте и на Linux
В веб-клиенте COM-технология недоступна. Рабочий вариант — сформировать документ на сервере (например, заполнить макет табличного документа или использовать готовый docx-файл из хранилища), поместить его во временное хранилище и вызвать ПолучитьФайл(). Браузер скачает файл, и пользователь откроет его локально установленным Word.
Для серверов на Linux и сценариев без Office вообще есть альтернатива: заполнение docx-шаблона как zip-архива с заменой XML внутри документа. Это требует аккуратной работы со структурой файла, но не зависит от платформы и не требует лицензий Office. Также можно формировать печатные формы в 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.