При переходе с платформы 1С:Предприятие 8.2 на 1С:Предприятие 8.3 разработчики часто сталкиваются с ситуацией, когда проверенный код инициализации внешних компонентов, таких как Excel.Application или драйверы торгового оборудования (например, торговых весов), прекращает работать и вызывает ошибки вида «Ошибка при вызове конструктора (Новый COMОбъект)».
Рассмотрим подробнее причины возникновения этой проблемы и разберем по шагам, как правильно настроить работу с COM-объектами в платформе 1С 8.3.
Проанализируем ситуацию: в толстом клиенте 1С 8.2 или при работе с обычными формами код по умолчанию исполнялся на стороне клиента, где зарегистрированы все необходимые внешние библиотеки и программы (MS Office, драйверы весов и сканеров).
В управляемом приложении 1С 8.3 при клиент-серверном режиме работы код процедуры часто ошибочно выполняется на сервере (в контексте с директивой &НаСервере или в серверном модуле). Это приводит к сбою по следующим причинам:
rphost.exe). 64-битный процесс сервера не может напрямую загрузить 32-битную COM-библиотеку.usr1cv8), у которой нет локального профиля пользователя и прав на запуск интерактивных GUI-приложений, таких как Excel.Если взаимодействие с COM-объектом (например, подключение электронных весов или загрузка локального файла Excel) требуется для конкретного пользователя, вызов конструктора Новый COMОбъект должен выполняться строго на клиенте.
Посмотрим на пример правильного выполнения процедуры в клиенте управляемого приложения:
&НаКлиенте
Процедура ПодключитьВесыНаКлиенте()
Попытка
Весы = Новый COMОбъект("Controller.ScAuto");
// Работа с объектом весов
Исключение
Сообщить("Не удалось инициализировать COM-объект на клиенте: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Важно: Передавать полученный COM-объект между клиентом и сервером в качестве параметра процедуры нельзя. Инициализация и вся последующая работа с объектом должны происходить строго в рамках одного контекста.
Если бизнес-логика требует создания COM-объекта именно в серверном контексте (например, в фоновом или регламентном задании), необходимо настроить среду выполнения на сервере.
1. Использование Служб компонентов (COM+ Application):
Для запуска 32-битных компонентов на 64-битной платформе 1С настроим обертку dllhost.exe:
dcomcnfg).2. Создание каталогов Desktop для MS Excel:
Для работы Excel.Application под учетной записью службы на сервере Windows требуется вручную создать служебные папки профиля:
C:\Windows\SysWOW64\config\systemprofile\DesktopC:\Windows\System32\config\systemprofile\DesktopЧтобы избежать проблем с разрядностью и зависимостью от операционной системы Windows, рекомендуется переходить на современные стандарты 1С:
ТабличныйДокумент и его метод Прочитать() или Записать() с типом файла ТипФайлаТабличногоДокумента.XLSX. Это работает на любых платформах (включая Linux) без применения внешних COM-компонент.