Почему перестал работать дополнительный обработчик 1С при заполнении файлов MS Word и как это исправить?

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

В процессе эксплуатации системы «1С:Документооборот» часто используются дополнительные обработчики для автоматизации рутинных задач, таких как регистрация документов и заполнение файлов по шаблонам. Однако иногда стабильно работающий механизм внезапно дает сбой, выдавая техническую ошибку: «Ошибка работы с приложением MS Word. Необходимо проверить правильность установки приложения». В данной статье мы подробно разберем причины возникновения этой ситуации, проанализируем программный код обработчика и предложим пошаговый алгоритм решения проблемы.

Анализ программного кода обработчика

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


// Поиск объекта
Задача = Событие.Источник;
Выполнять = Ложь;

Если ТипЗнч(Задача.БизнесПроцесс) = Тип("БизнесПроцессСсылка.Рассмотрение") Тогда
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Предметы.РольПредмета,
        |   Предметы.Предмет
        |ИЗ
        |   Задача.ЗадачаИсполнителя.Предметы КАК Предметы
        |ГДЕ
        |   Предметы.Ссылка = &ЗадачаСсылка";
    
    Запрос.УстановитьПараметр("ЗадачаСсылка", Задача);
    Результат = Запрос.Выполнить();
    
    Если Не Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл
            Объект = Выборка.Предмет.ПолучитьОбъект();
            Если ТипЗнч(Объект.Ссылка) = Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
                Если (СокрЛП(Объект.ВидДокумента) = "Рассмотрение заявки") Тогда
                    Выполнять = Истина;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
КонецЕсли;

В первой части кода мы проверяем контекст выполнения: относится ли текущая задача к бизнес-процессу Рассмотрение и связан ли с ней документ нужного вида. Если условия соблюдены, алгоритм переходит к регистрации документа и заполнению шаблонов.


Если Выполнять Тогда
    // Автоматическая регистрация
    Если Не ЗначениеЗаполнено(Объект.РегистрационныйНомер) Тогда
        Нумератор = Нумерация.ПолучитьНумераторДокумента(Объект);
        Если ЗначениеЗаполнено(Нумератор) Тогда
            ДатаРегистрации = ТекущаяДата();
            ТекущийПользователь = Пользователи.ТекущийПользователь();
            Объект.ДатаРегистрации = ДатаРегистрации;
            
            СтруктураПараметров = НумерацияКлиентСервер.ПолучитьПараметрыНумерации(Объект);
            Нумерация.СформироватьЧисловойНомерДокумента(СтруктураПараметров, Объект.ЧисловойНомер);
            
            ОписанияОшибок = Новый СписокЗначений;
            Нумерация.СформироватьСтроковыйНомерДокумента(СтруктураПараметров, Объект.РегистрационныйНомер, ОписанияОшибок);
            
            Объект.Зарегистрировал = ТекущийПользователь;
            Объект.Записать();
            Делопроизводство.ЗаписатьСостояниеДокумента(Объект.Ссылка, ДатаРегистрации, Перечисления.СостоянияДокументов.Зарегистрирован, ТекущийПользователь);
        КонецЕсли;
    КонецЕсли;

    // Автозаполнение файлов
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Файлы.Ссылка
        |ИЗ
        |   Справочник.Файлы КАК Файлы
        |ГДЕ
        |   Файлы.ВладелецФайла = &ВладелецФайла
        |   И Файлы.ПометкаУдаления = ЛОЖЬ";
    
    Запрос.УстановитьПараметр("ВладелецФайла", Объект.Ссылка);
    Результат = Запрос.Выполнить();
    
    Если Не Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл
            Файло = Выборка.Ссылка;
            // Критическая точка: вызов интеграции с MS Word
            ДанныеВыполнения = АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(Истина, Файло, Истина);
        КонецЦикла;
    КонецЕсли;
КонецЕсли;

Сбой происходит именно в методе АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца. Эта функция обращается к COM-объекту Microsoft Word для модификации текста внутри файла. Если система не может инициализировать Word, работа обработчика прерывается с ошибкой. В качестве альтернативы, исключающей зависимость от внешних офисных приложений, можно использовать механизм автозаполнения шаблонов файлов в формате MXL.

Решение 1: Проблема форматов (.doc vs .docx)

Проанализируем наиболее простую и распространенную причину. Современные версии Microsoft Office и библиотеки 1С по-разному взаимодействуют с устаревшими форматами файлов. Выясним, почему формат имеет значение:

  1. Устаревший формат .doc: Файлы Word 97-2003 открываются в режиме ограниченной функциональности. При программном доступе через COM-соединение Word может блокировать внесение изменений или требовать интерактивного подтверждения от пользователя, что невозможно в фоновом режиме работы сервера.
  2. Современный формат .docx: Основан на XML, более стабилен и оптимизирован для работы программных интерфейсов.

Что нужно сделать: Если обработчик перестал работать для конкретного документа, проверьте расширение прикрепленного файла. Замените файл шаблона с .doc на .docx. Как показывает практика, в большинстве случаев это мгновенно устраняет ошибку инициализации приложения. Для автоматизации этого процесса можно использовать расширение для автоматической конвертации файлов doc в docx при добавлении к документам.

Решение 2: Проверка целостности шаблона

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

  1. Перезагрузка шаблона: Удалите текущий файл из документа и загрузите его заново. Иногда при обновлении системы или сбоях в хранилище файлов (томах) связь между записью в базе и физическим файлом может нарушиться.
  2. Очистка скриптов в Word: Если внутри документа Word содержатся встроенные макросы (VBA), они могут конфликтовать с механизмом автозаполнения 1С. Попробуйте использовать «чистый» файл без внутренних скриптов.

Решение 3: Системные настройки сервера (Desktop folders)

Если проблема носит массовый характер или проявляется периодически на стороне сервера, проанализируем настройки операционной системы. Для корректной работы COM-объектов MS Word под учетной записью службы 1С (например, USR1CV8) требуются определенные системные папки. Без них Word не сможет создать временные файлы при запуске в фоновом режиме.

Рассмотрим порядок действий для системного администратора:

  1. Проверьте наличие директории для 64-битных систем: C:\Windows\SysWOW64\config\systemprofile\Desktop
  2. Проверьте наличие директории для 32-битных систем: C:\Windows\System32\config\systemprofile\Desktop
  3. Если папки Desktop отсутствуют, их необходимо создать вручную.
  4. Убедитесь, что у пользователя, под которым запущена служба «1С:Предприятие», есть полные права доступа к этим папкам.

Решение 4: Настройка прав в DCOM

Разберем ситуацию, когда Word установлен, но система 1С «не видит» его прав на запуск. Это решается через утилиту настройки служб компонентов.

  1. Запустите команду dcomcnfg в строке выполнения Windows.
  2. Перейдите в раздел Службы компонентов — Компьютеры — Мой компьютер — Настройка DCOM.
  3. Найдите в списке Microsoft Word Document (или аналогичное название).
  4. В свойствах на вкладке «Безопасность» добавьте права на «Запуск и активацию» для учетной записи сервера 1С.
  5. На вкладке «Удостоверение» убедитесь, что выбрано значение «Запускающий пользователь» или укажите конкретную учетную запись администратора.

Решение 5: Зависшие процессы и обновления

Выясним, как внешние факторы влияют на работу обработчика. Часто ошибки начинаются после установки обновлений Windows или MS Office.

Проанализируем важные моменты:

Таким образом, если ваш дополнительный обработчик в «1С:Документооборот» внезапно перестал заполнять файлы, первым делом проверьте формат шаблона (.docx) и наличие необходимых системных папок на сервере. Эти простые действия решают до 90% проблем, связанных с автоматизацией формирования документов.

← На главную