Разработка и Конфигурация · 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 или внешние компоненты.
Сравнение способов
Полный контроль над документом, заполнение шаблонов. Требует установленный Word и Windows; на сервере работает только при установленном Office и правах учётной записи службы.
Самый простой показ документа пользователю. Нет программного доступа к содержимому, результат зависит от ассоциаций файлов на компьютере.
Работает без Word, подходит для сервера и Linux. Только чтение текста, сложный разбор таблиц, нет форматирования.
Открытие файла из макета или хранилища 1С
Часто файл Word хранится не на диске, а внутри конфигурации: в макете типа «Двоичные данные» или в присоединённых файлах справочника. Перед открытием его нужно сохранить во временный файл на диске.
// Файл в макете конфигурации
ДвоичныеДанные = ПолучитьОбщийМакет("ШаблонДоговора");
ПутьКФайлу = ПолучитьИмяВременногоФайла("docx");
ДвоичныеДанные.Записать(ПутьКФайлу);
// Далее открываем любым способом
Word = Новый COMОбъект("Word.Application");
Word.Visible = Истина;
Word.Documents.Open(ПутьКФайлу);
Для присоединённых файлов в типовых конфигурациях используется функция общего модуля работы с файлами (например, РаботаСФайлами.ДвоичныеДанныеФайла или аналог в вашей конфигурации), которая возвращает двоичные данные по ссылке на присоединённый файл.
- 1Добавьте файл Word в конфигурацию как общий макет с типом «Двоичные данные»
- 2В коде получите макет и запишите его во временный файл через ПолучитьИмяВременногоФайла("docx")
- 3Откройте временный файл через COM-объект или запустите его для пользователя
- 4После закрытия документа удалите временный файл через УдалитьФайлы()
Типичные ошибки и их причины
Самая частая ошибка — «Недопустимая строка с указанием класса» при создании COMОбъект("Word.Application"). Она означает, что Word не установлен на компьютере, где выполняется код, либо разрядность Office не совместима с разрядностью процесса 1С. Проверьте, что Word реально установлен и запускается вручную.
Вторая группа проблем — пути к файлу. Код, выполняемый на сервере, не видит диск C клиентского компьютера: путь "C:\Документы\..." в серверном контексте указывает на диск сервера. Передавайте файл между клиентом и сервером через временное хранилище (ПоместитьВоВременноеХранилище / ПолучитьИзВременногоХранилища).
Третья типичная ситуация — модальные окна Word. Если открываемый документ содержит макросы или повреждён, Word показывает диалоговое окно, и серверный код «зависает» в ожидании. Для фоновой обработки отключайте отображение предупреждений: Word.DisplayAlerts = 0 и открывайте документ с параметром ReadOnly, если изменения не нужны.
Как проверить, что всё сработало правильно
После открытия документа полезно убедиться, что операция завершилась успешно, прежде чем продолжать обработку. Для COM-варианта проверьте, что объект документа создан и количество открытых документов больше нуля.
Как проверить результат
Переменная содержит COM-объект, Word.Documents.Count() больше 0
Возникло исключение или документ не открылся — проверяйте путь и права доступа
Процесс завершён после 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 или сторонних конвертеров.