Как исправить ошибку открытия документа Word на сервере 1С в регламентном задании?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто разработчики и системные администраторы сталкиваются с неприятной ситуацией: обработка для заполнения или чтения данных из *.xls, *.docx и других форматов прекрасно работает при ручном запуске на клиенте, но стоит перевести ее в регламентное задание, как процесс падает с ошибкой или бесконечно висит. Проблема часто возникает, когда выполняется экспорт печатных форм в изображения. Давайте подробно разберем, почему это происходит, и рассмотрим рабочие способы устранения данной проблемы.

Симптомы проблемы и анализ кода

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


WordObject = Новый COMОбъект("Word.Application");
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("DOC");
// Сохраняем макет или файл во временную директорию
ДвоичныеДанные.Записать(ИмяВременногоФайла);
// Попытка открыть файл
WordObject.Documents.Open(ИмяВременногоФайла);
// Обращение к открытому документу
Док = WordObject.Application.Documents(1);

При выполнении этого кода на сервере 1С (аналогичные трудности встречаются, когда используется выполнение запросов через COM-подключение) в журнале регистрации часто фиксируется ошибка: Ошибка при вызове метода контекста (Documents): Произошла исключительная ситуация (Microsoft Word): Запрашиваемый номер семейства не существует. Причина заключается в том, что метод Open фактически не срабатывает, коллекция Documents остается пустой (ее Count равен нулю), и обращение к первому элементу вызывает исключение.

Решение 1: Создание системных папок Desktop (Самое частое решение)

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

Рассмотрим по шагам, как это исправить:

  1. Откройте проводник на сервере, где установлен агент 1С и MS Office.
  2. Перейдите по пути: C:\Windows\System32\config\systemprofile\ и создайте внутри папку с именем Desktop.
  3. Если у вас 64-битная операционная система (что сейчас является стандартом), обязательно перейдите по пути: C:\Windows\SysWOW64\config\systemprofile\ и также создайте там папку Desktop.
  4. Перезапустите службу агента сервера 1С, чтобы изменения корректно применились.

В 90% случаев одного этого действия достаточно, чтобы Word.Application начал успешно открывать файлы на сервере.

Решение 2: Настройка прав пользователя службы 1С

Если создание папок не помогло, проанализируем права пользователя. Служба 1С (часто это пользователь USR1CV8) должна иметь права на запуск DCOM-объектов.

  1. Откройте консоль Службы компонентов (введите dcomcnfg в поиске Windows).
  2. Перейдите в раздел Компьютеры -> Мой компьютер -> Настройка DCOM.
  3. Найдите компонент Документ Microsoft Word 97–2003 (или аналогичный компонент Word).
  4. Откройте его свойства, перейдите на вкладку "Безопасность".
  5. В разделах "Права на запуск и активацию" и "Права доступа" выберите "Настроить" и добавьте пользователя службы сервера 1С, выдав ему полные права на локальный запуск и активацию.

Решение 3: Устранение зависаний (0% активности процессора)

Иногда COM-объект создается без ошибок, но на методе Open процесс зависает намертво, не нагружая сервер. Посмотрим на причину: Word выводит скрытое диалоговое окно (например, окно активации, лицензионное соглашение, вопрос о восстановлении файлов или предупреждение безопасности). Так как фоновый процесс не имеет интерактивного рабочего стола, нажать кнопку в этом окне некому.

Разберем, как это исправить:

  1. Авторизуйтесь в Windows на сервере именно под тем пользователем, от имени которого запущена служба агента сервера 1С (например, USR1CV8).
  2. Запустите Microsoft Word вручную из меню "Пуск".
  3. Закройте все всплывающие окна: окно приветствия, активации, принятия лицензии, настройки обновлений и предложения восстановить старые документы.
  4. Закройте Word и вернитесь в свой профиль. После этого фоновые задания перестанут "спотыкаться" об эти диалоги. Для управления очередью таких задач хорошо подходит конвейер обработки задач.

Решение 4: Сетевые принтеры и недопустимые символы

Обязательно проверим еще два важных нюанса, которые часто упускают:

  1. Принтер по умолчанию: При запуске Word опрашивает принтер. Если по умолчанию установлен сетевой принтер, который сейчас недоступен (или к которому у службы 1С нет прав доступа), Word зависнет в ожидании ответа сети. Установите для пользователя USR1CV8 локальный виртуальный принтер (например, Microsoft Print to PDF) в качестве принтера по умолчанию.
  2. Имя файла: Проверьте переменную ИмяВременногоФайла. Если путь содержит запрещенные символы (кавычки, лишние двоеточия), метод платформы ДвоичныеДанные.Записать() может сработать, а вот сам Word открыть такой файл откажется.

Альтернативный подход: Отказ от COM на сервере

Официальная позиция Microsoft гласит: автоматизация пакета Office на сервере в фоновых службах не поддерживается и не рекомендуется. Процесс может зависнуть после любого обновления Windows или Office.

Вместо COM-объектов рекомендуем использовать работу с форматом .docx как с ZIP-архивом. Современные документы Word (OpenXML) — это архив, внутри которого лежат XML-файлы. Платформа 1С отлично умеет распаковывать ZIP, находить нужный XML-файл (обычно word/document.xml), выполнять замену текста или параметров как строк, и запаковывать обратно. Такой подход работает мгновенно, не требует лицензии Office на сервере и никогда не зависает в регламентных заданиях!

← На главную