При переходе на 64-разрядный клиент платформы 1С:Предприятие 8.3 пользователи и разработчики часто сталкиваются с ситуацией, когда перестают работать привычные печатные формы, использующие макеты ActiveDocument или COM-автоматизацию Microsoft Word.
При выполнении кода получения объекта макета происходит аварийное завершение с сообщением об ошибке:
MSWord = Договор.Получить();
// По причине: Не удалось создать объект. Возможно, отсутствует соответствующее приложение.
Разберем подробно причины возникновения этой проблемы и проанализируем доступные варианты решения.
Основная причина кроется в несоответствии разрядностей процессов. 64-разрядный клиент 1С работает в 64-битном адресном пространстве операционной системы. Если на компьютере пользователя установлен 32-разрядный пакет Microsoft Office, то его In-Process COM-компоненты зарегистрированы в 32-битной ветке реестра Windows (WOW6432Node).
При обращении к макету типа ActiveDocument платформа 1С пытается инициализировать OLE-объект непосредственно в контексте собственного 64-битного процесса. Поскольку 64-разрядный процесс не может напрямую загрузить 32-разрядную библиотеку DLL или вызвать 32-разрядный COM-сервер без специальной прослойки, операционная система блокирует такой вызов и возвращает ошибку создания объекта.
Самый простой и стандартный способ устранения несовместимости — установка 64-битной версии Microsoft Office на рабочие места пользователей.
После этого 64-разрядный клиент 1С сможет напрямую обращаться к объектам Word.Application и макетам ActiveDocument без дополнительных манипуляций.
Если изменить разрядность пакета Microsoft Office не представляется возможным, на операционной системе Windows можно настроить запускаемый суррогатный процесс dllhost.exe через DCOM/COM+.
Проанализируем шаги настройки межпроцессного взаимодействия (RPC/DCOM):
comexp.msc в консоли или окне «Выполнить»).В результате такой настройки 32-разрядный Word будет запускаться в изолированном процессе-контейнере dllhost.exe, а 64-битный клиент 1С сможет передавать ему команды через вызовы DCOM/RPC.
Если требования к оперативной памяти на клиентском рабочем месте не критичны, можно вернуться на 32-разрядный клиент 1С. Однако стоит учесть важный момент: при работе со сложными типовыми конфигурациями (например, 1С:Бухгалтерия 8) 32-битный клиент может испытывать нехватку адресации оперативной памяти при тяжелых операциях обновления или формирования объемных отчетов.
Компромиссным решением является параллельная установка обеих разрядностей платформы:
Посмотрим на более современный подход, который полностью избавляет от зависимости от разрядности клиента, установленного MS Office и даже операционной системы (подходит для Linux и веб-клиента).
Документ формата .docx представляет собой обычный ZIP-архив с набором XML-файлов. Сформировать документ можно средствами самой платформы 1С:
ЧтениеZipФайла.word/document.xml, заменим в нем заготовленные метки-теги на нужные значения.ЗаписьZipФайла.Данный вариант не требует использования COM-автоматизации, не зависит от разрядности 1С и работает на любых платформах без необходимости установленного пакета MS Office.