При переходе на современные 64-битные операционные системы и платформу 1С:Предприятие версии 8.3 многие администраторы сталкиваются с неприятной ситуацией в конфигурации "Управление производственным предприятием" (УПП). На 64-битных клиентах при попытке сформировать внешнюю печатную форму в Microsoft Word возникает ошибка: "Не удалось сформировать внешнюю печатную форму! Ошибка при вызове метода контекста (Получить): Не удалось создать объект. Возможно, отсутствует соответствующее приложение". При этом на 32-битных клиентах всё работает идеально.
В этой статье мы подробно разберем, почему возникает этот конфликт, проанализируем технические нюансы взаимодействия 1С с COM-объектами и рассмотрим несколько вариантов решения проблемы.
Давайте проанализируем ситуацию. В старых типовых решениях, таких как УПП, код формирования печатных форм часто использует функцию ПолучитьCOMОбъект(ПутьКФайлу). Этот метод предназначен для того, чтобы 1С попыталась самостоятельно определить приложение, связанное с файлом, и инициализировать его.
Выясним причину ошибки: в 64-битной среде 1С этот метод работает крайне нестабильно с объектами Microsoft Office. Если 64-битный клиент 1С пытается инициализировать COM-объект через путь к файлу шаблона, операционная система может некорректно сопоставить интерфейсы, особенно если в реестре остались "хвосты" от предыдущих версий Office или если используются специфические настройки безопасности.
Рассмотрим, как можно изменить код для повышения стабильности. Вместо неявного получения объекта через файл, лучше использовать прямое создание экземпляра приложения:
// Старый вариант, который часто падает в x64
// ОбъектВорд = ПолучитьCOMОбъект(ПутьКФайлу);
// Рекомендуемый вариант для x64
Попытка
WordApp = Новый COMОбъект("Word.Application");
WordApp.Visible = Ложь;
Документ = WordApp.Documents.Open(ПутьКФайлу);
Исключение
Сообщить("Не удалось запустить Microsoft Word: " + ОписаниеОшибки());
КонецПопытки;
Важно понимать разницу между современными конфигурациями (например, ERP) и УПП. В ERP формирование документов часто происходит на стороне сервера в фоновом режиме, что позволяет более гибко управлять процессами. УПП базируется на Обычном приложении, где практически вся работа с COM-интерфейсами и ActiveX происходит непосредственно на стороне Толстого клиента.
Разберем по шагам, почему 64-битный клиент 1С в режиме обычного приложения испытывает трудности:
Несмотря на то, что это кажется шагом назад, использование 32-битного клиента 1С на рабочих местах пользователей — это самый быстрый и надежный способ решить проблему "из коробки". Рассмотрим преимущества этого подхода:
Если бизнес-задачи требуют обязательного использования 64-битного клиента, попробуем проверить настройки компонентов Windows. Иногда проблема кроется в том, что интерфейсы Word неправильно зарегистрированы для взаимодействия с 64-битными процессами.
Проанализируем шаги настройки:
dcomcnfg (Службы компонентов).HKEY_CLASSES_ROOT\TypeLib. Если там присутствуют ссылки на старые версии Office, которые физически удалены, это может сбивать 1С при попытке создать COMОбъект.Самый современный и правильный с технической точки зрения путь — это полный отказ от использования COM-объектов. В современных конфигурациях 1С файлы Word формируются путем генерации XML-структуры формата .docx. Этот метод вообще не требует наличия установленного Word на компьютере и работает одинаково быстро на любой разрядности платформы.
Рассмотрим пример логики:
.dot, мы берем файл .docx (который по сути является ZIP-архивом с XML-файлами внутри).{НомерДокумента}) на реальные данные из 1С.Это требует значительных усилий программиста, так как придется переписать механизм формирования для каждой печатной формы, но это навсегда снимет зависимость от разрядности клиента и версии офиса.
Подведем итог нашему анализу. Ошибка создания объекта в УПП на 64-битных клиентах — это следствие использования устаревших технологий взаимодействия с внешними приложениями в коде конфигурации.
Для системных администраторов: Оптимальным решением будет установка 32-битной версии клиента 1С:Предприятие на рабочие станции. Это официально поддерживаемый режим, который гарантирует работу всех функций УПП без необходимости колхозить "обертки" или переписывать код.
Для разработчиков: Если ваша компания планирует оставаться на УПП еще долгое время, рекомендуем постепенно переводить критически важные печатные формы на использование метода Новый COMОбъект("Word.Application") или, что еще лучше, на формирование документов через XML-структуру файлов Office Open XML.