При переходе с тонкого клиента на веб-клиент программисты 1С часто сталкиваются с проблемой: код, который годами успешно формировал отчеты в Microsoft Word, внезапно перестает работать. На сервере при вызове конструктора COMОбъект возникает ошибка «Интерфейс не поддерживается (0x80004002)». Проанализируем причины этой ситуации и разберем по шагам, как настроить серверное окружение для корректной работы автоматизации Office.
Рассмотрим стандартный фрагмент кода, который вызывает ошибку:
// Код в общем модуле с признаком "Сервер"
Процедура СоздатьДокументНаСервере()
Попытка
ОбъектВорд = Новый COMОбъект("Word.Application");
Исключение
Сообщить("Ошибка при вызове конструктора (COMОбъект): " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Когда мы запускаем этот код в Тонком клиенте (локально), он выполняется от имени текущего пользователя Windows, у которого есть права на запуск Word и загруженный профиль. Однако при работе через Веб-клиент серверный код исполняется в контексте веб-сервера (IIS или Apache). Проанализируем ключевые отличия:
IUSR или NetworkService), у которой нет доступа к интерактивным объектам Office.HKEY_CURRENT_USER, которые отсутствуют у системных служб.Разберем «магическое» решение, которое часто исправляет ошибку интерфейса без глубокой перенастройки сервера. Microsoft Word при запуске через COM-соединение на сервере требует наличия определенных папок для временных данных рабочего стола, даже если он работает в фоновом режиме.
Проанализируем необходимость создания следующих директорий на сервере, где установлен веб-сервер и MS Office:
C:\Windows\SysWOW64\config\systemprofile\DesktopC:\Windows\System32\config\systemprofile\DesktopВажно: После создания папок Desktop необходимо предоставить права «Полный доступ» пользователю, от имени которого запущен пул приложений вашего веб-сервера (например, IIS AppPool\ИмяВашегоПула или USR1CV8).
Если вы используете IIS, проблема может заключаться в изоляции пула приложений. Посмотрим, как это исправить:
True.Как показывает практика, именно строгие политики безопасности IIS часто становятся непреодолимым препятствием. В некоторых случаях проще переключиться на Apache, так как его настройки взаимодействия с рабочим столом Windows более гибкие по умолчанию.
Даже если нам удалось создать объект Word.Application на сервере и заполнить его данными, возникает проблема передачи файла пользователю. В веб-клиенте мы не можем просто открыть файл по пути C:\Temp\file.doc.
Рассмотрим правильный алгоритм работы с файлами в веб-клиенте:
Вместо устаревшего метода НачатьЗапись(), который может блокировать файл расширением браузера 1CFileExtension, используем НачатьПолучениеФайлов(). Это позволит браузеру корректно «отпустить» файл после скачивания.
// Пример получения файла на клиенте
ПараметрыПолучения = Новый ПараметрыПолученияФайлов();
ОписаниеФайла = Новый ОписаниеПередаваемогоФайла(ПутьКФайлу, АдресВХранилище);
МассивФайлов = Новый Массив;
МассивФайлов.Добавить(ОписаниеФайла);
НачатьПолучениеФайлов(Новый ОписаниеОповещения("ЗавершитьПолучение", ЭтотОбъект), МассивФайлов, ПараметрыПолучения, Истина);
Проанализируем ситуацию: использование COM-объектов на сервере официально не поддерживается Microsoft (Server-side Automation). Это ведет к утечкам памяти и зависаниям процессов WINWORD.EXE. Если ваша конфигурация должна работать в веб-клиенте стабильно, рассмотрим альтернативу — работу с форматом DOCX напрямую.
Файл DOCX — это ZIP-архив с набором XML-документов. Мы можем изменять данные в нем без установленного Word на сервере:
ЧтениеZipФайла для распаковки шаблона.word/document.xml.[НомерДоговора] на реальное значение) с помощью функции СтрЗаменить.ЗаписьZipФайла.Этот метод работает на любой операционной системе (включая Linux), не требует лицензии Office на сервере и исключает ошибку «Интерфейс не поддерживается», так как COMОбъект вообще не используется.
Если вам необходимо оставить работу через COM в веб-клиенте, начните с создания системных папок Desktop и настройки прав пула приложений IIS. Если это не помогает — попробуйте запустить веб-сервер на Apache. Однако для долгосрочной стабильности системы мы рекомендуем рассмотреть переход на формирование документов через модификацию XML-структуры DOCX или использование механизмов печати из Библиотеки стандартных подсистем (БСП).