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

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

Как открыть файл Word в 1С 8

Как открыть файл Word в 1С 8 через COM-объект, запуск внешнего приложения и чтение docx. Примеры кода, типичные ошибки и способы проверки результата.

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

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

Ниже разобраны рабочие варианты с примерами кода на встроенном языке 1С, условиями применения и типичными ошибками.

Способ 1. Открытие через COM-объект Word.Application

COM-подключение — классический способ взаимодействия 1С с Microsoft Office. Платформа создаёт экземпляр приложения Word и управляет им программно: открывает документы, заполняет закладки, сохраняет результат.

Минимальный код для открытия существующего файла:

Попытка

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

Исключение

Сообщить("Не удалось запустить Word: " + ОписаниеОшибки());

Возврат;

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

Word.Visible = Истина; // показать окно Word пользователю

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

Параметр Visible определяет, увидит ли пользователь окно Word. Для фоновой обработки (например, заполнения шаблона и сохранения в новый файл) его устанавливают в Ложь, а после работы закрывают документ и приложение:

Документ.Close(Ложь); // Ложь — не сохранять изменения

Word.Quit();

Word = Неопределено;

Заполнение шаблона через закладки

Типовой сценарий — открыть шаблон договора и подставить данные из 1С в закладки Word. Закладки создаются в самом документе Word (Вставка → Закладка), после чего доступны из кода:

Word.Selection.GoTo(-1, , , "Контрагент"); // -1 = wdGoToBookmark

Word.Selection.TypeText(Строка(Контрагент));

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

Способ 2. Запуск файла через внешнее приложение

Если задача — просто показать документ пользователю, не нужен COM-объект. Достаточно запустить файл средствами операционной системы: Windows сама откроет его в ассоциированной программе (Word, LibreOffice или просмотрщике).

// Тонкий клиент, 1С 8.3

НачатьЗапускПриложения(

Новый ОписаниеОповещения("ПослеЗапуска", ЭтотОбъект),

"C:\Документы\Договор.docx");

Для управляемых форм в режиме синхронных вызовов (если он разрешён в конфигурации) можно использовать ЗапуститьПриложение("C:\Документы\Договор.docx"). В файловом варианте путь должен быть доступен с клиентского компьютера, в клиент-серверном — файл предварительно передают на клиента через временное хранилище.

Способ 3. Чтение docx без установленного Word

Файл формата docx — это zip-архив, внутри которого текст документа хранится в файле word/document.xml. Платформа 1С умеет работать с zip-архивами и XML, поэтому прочитать текст можно без Word вообще.

Общая последовательность: открыть файл через ЧтениеZipФайла, извлечь document.xml во временный каталог, разобрать его через ЧтениеXML и собрать текст из узлов w:t. Этот способ подходит для загрузки данных из документов в справочники и регистры, а также для работы на сервере под Linux, где COM недоступен.

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

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

COM-объект Word.Application

Полный контроль над документом, заполнение шаблонов. Требует установленный Word и Windows; на сервере работает только при установленном Office и правах учётной записи службы.

Запуск приложения с путём к файлу

Самый простой показ документа пользователю. Нет программного доступа к содержимому, результат зависит от ассоциаций файлов на компьютере.

Чтение docx как zip + XML

Работает без Word, подходит для сервера и Linux. Только чтение текста, сложный разбор таблиц, нет форматирования.

Открытие файла из макета или хранилища 1С

Часто файл Word хранится не на диске, а внутри конфигурации: в макете типа «Двоичные данные» или в присоединённых файлах справочника. Перед открытием его нужно сохранить во временный файл на диске.

// Файл в макете конфигурации

ДвоичныеДанные = ПолучитьОбщийМакет("ШаблонДоговора");

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

ДвоичныеДанные.Записать(ПутьКФайлу);

// Далее открываем любым способом

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

Word.Visible = Истина;

Word.Documents.Open(ПутьКФайлу);

Для присоединённых файлов в типовых конфигурациях используется функция общего модуля работы с файлами (например, РаботаСФайлами.ДвоичныеДанныеФайла или аналог в вашей конфигурации), которая возвращает двоичные данные по ссылке на присоединённый файл.

Порядок действий для шаблона из макета
  1. 1
    Добавьте файл Word в конфигурацию как общий макет с типом «Двоичные данные»
  2. 2
    В коде получите макет и запишите его во временный файл через ПолучитьИмяВременногоФайла("docx")
  3. 3
    Откройте временный файл через COM-объект или запустите его для пользователя
  4. 4
    После закрытия документа удалите временный файл через УдалитьФайлы()

Типичные ошибки и их причины

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

Вторая группа проблем — пути к файлу. Код, выполняемый на сервере, не видит диск C клиентского компьютера: путь "C:\Документы\..." в серверном контексте указывает на диск сервера. Передавайте файл между клиентом и сервером через временное хранилище (ПоместитьВоВременноеХранилище / ПолучитьИзВременногоХранилища).

Третья типичная ситуация — модальные окна Word. Если открываемый документ содержит макросы или повреждён, Word показывает диалоговое окно, и серверный код «зависает» в ожидании. Для фоновой обработки отключайте отображение предупреждений: Word.DisplayAlerts = 0 и открывайте документ с параметром ReadOnly, если изменения не нужны.

Типичные ошибки
01
Создание COM-объекта на сервере без установленного Office — ошибка «Недопустимая строка с указанием класса» и остановка обработки
02
Использование клиентского пути к файлу в серверном коде — файл не найден, потому что сервер смотрит на свой диск
03
Отсутствие Quit() и обнуления переменной — в диспетчере задач копятся зависшие процессы WINWORD.EXE
04
Запись документа по тому же пути, откуда он открыт у другого пользователя — ошибка доступа к заблокированному файлу

Как проверить, что всё сработало правильно

После открытия документа полезно убедиться, что операция завершилась успешно, прежде чем продолжать обработку. Для COM-варианта проверьте, что объект документа создан и количество открытых документов больше нуля.

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

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

Объект документа после Documents.Open
Норма

Переменная содержит COM-объект, Word.Documents.Count() больше 0

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

Возникло исключение или документ не открылся — проверяйте путь и права доступа

Процесс WINWORD.EXE в диспетчере задач после завершения
Норма

Процесс завершён после Quit() и обнуления переменной

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

Процессы накапливаются — где-то не вызван Quit() или код прерван исключением

Заполненный шаблон
Норма

Закладки заменены данными, документ сохранён под новым именем

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

Пустые места вместо данных — имена закладок в коде не совпадают с именами в документе

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

Итог

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

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

Частые вопросы

Можно ли открыть файл Word в 1С, если Microsoft Office не установлен?

Да. Для показа пользователю запустите файл через НачатьЗапускПриложения — откроется программа, назначенная в системе для docx. Для программного чтения текста разберите docx как zip-архив через ЧтениеZipФайла и ЧтениеXML. COM-объект без установленного Word работать не будет.

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

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

Как открыть файл Word на сервере 1С?

Технически COM-объект создаётся и на сервере, если там установлен Office и у учётной записи службы агента есть права. Однако Microsoft не рекомендует автоматизацию Office на сервере: возможны зависания на диалоговых окнах. Надёжнее читать docx как zip-архив или переносить обработку на клиента.

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

В методе Documents.Open третьим параметром передайте Истина: Word.Documents.Open(Путь, , Истина). Документ откроется в режиме ReadOnly, и пользователь не сможет случайно изменить исходный файл шаблона.

Что делать, если после работы 1С в диспетчере задач остаются процессы WINWORD.EXE?

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

Можно ли открыть старый файл формата .doc?

Да, COM-объект Word.Application открывает и doc, и docx — метод Documents.Open одинаков. А вот чтение через zip-архив работает только с docx: старый формат doc является бинарным и требует установленного Word или сторонних конвертеров.