При настройке обменов данными между конфигурациями «1С:Предприятие» разработчики часто сталкиваются с крайне неприятной ситуацией. Налаженный и годами работающий обмен из Управления торговлей в Бухгалтерию предприятия редакции 2.0 внезапно ломается при переходе на Бухгалтерию редакции 3.0. При этом код инициализации соединения остается абсолютно идентичным, но система выдает ошибку «Класс не зарегистрирован» при попытке создать объект V83.COMConnector.
В этой статье мы подробно разберем, почему возникает эта проблема, в чем принципиальная разница в работе COM-соединения в Бухгалтерии 2.0 и 3.0, и рассмотрим пошаговые сценарии ее гарантированного решения.
Для того чтобы понять суть проблемы, нам необходимо проанализировать архитектурные различия между старыми конфигурациями на обычных формах и новыми решениями на управляемом интерфейсе.
Рассмотрим детально, где именно выполняется код создания COM-объекта в обоих случаях:
comcntr.dll, соединение успешно устанавливается.rphost.exe). Следовательно, попытка создать COM-соединение происходит не на локальном ПК, а на сервере «1С:Предприятия». Если на сервере библиотека comcntr.dll не зарегистрирована или имеет несовместимую разрядность, система незамедлительно выдаст ошибку отсутствия класса.Таким образом, главная причина кроется в том, что компонента COM-соединения не настроена на самом сервере 1С, хотя на клиентских машинах администраторы могли зарегистрировать ее вручную.
Вторая по частоте причина возникновения этой ошибки — несовпадение разрядности серверного процесса 1С и зарегистрированной библиотеки. В большинстве современных внедрений сервер «1С:Предприятия» является 64-разрядным (64-bit), в то время как пользователи могут работать с 32-разрядными клиентами.
Процесс 64-битного сервера rphost.exe физически не может напрямую вызвать 32-битную библиотеку comcntr.dll. Если при установке платформы на сервере была зарегистрирована только 32-разрядная версия компоненты, серверная база при попытке выполнить код выдаст ошибку «Класс не зарегистрирован».
Некоторые разработчики находят временное решение проблемы, заменяя в коде класс V83.COMConnector на V83.Application. Давайте посмотрим на пример такого кода:
// Было (вызывает ошибку на сервере):
COM1 = Новый COMОбъект("V83.COMConnector");
// Стало (работает, но имеет скрытые проблемы):
COM1 = Новый COMОбъект("V83.Application");
Выясним, почему такой подход временно решает проблему и почему его крайне не рекомендуется использовать на регулярной основе:
V83.Application запускает полноценное OLE-приложение 1С. Это означает, что на сервере в фоновом режиме запускается полноценный тяжеловесный сеанс «1С:Предприятия» со всеми вытекающими расходами оперативной памяти и процессорного времени. В то же время V83.COMConnector представляет собой легковесную библиотеку (In-Process сервер), которая работает внутри адресного пространства вызывающего процесса и не требует инициализации интерфейсных механизмов.V83.Application обычно автоматически прописывается в системном реестре Windows при установке платформы для всех пользователей. Настройка же V83.COMConnector требует отдельного внимания администратора.Поэтому давайте разберем правильные методы настройки системы, которые позволят вернуть эффективную и быструю работу оригинального V83.COMConnector.
Самый простой и надежный способ решить проблему разрядности и регистрации — использовать штатный установщик платформы 1С на сервере.
setup.exe той версии, которая сейчас является активной на сервере 1С.comcntr.dll в системном реестре Windows со всеми необходимыми правами доступа.Если у вас нет возможности запустить инсталлятор, мы можем зарегистрировать библиотеку вручную. Для этого нам понадобятся права администратора на сервере.
Выполним регистрацию по шагам:
cmd.exe) обязательно от имени администратора.C:\Program Files\1cv8\...C:\Program Files (x86)\1cv8\...
regsvr32 "C:\Program Files\1cv8\8.3.22.1709\bin\comcntr.dll"
При успешном выполнении вы увидите системное сообщение с текстом «Успешное выполнение DllRegisterServer в ...». После этого обязательно перезапустите службу сервера «1С:Предприятия», чтобы рабочие процессы обновили информацию о зарегистрированных классах.
Иногда возникает сложная ситуация: сервер 1С работает под управлением 64-битной системы, а внешние базы или другие компоненты требуют взаимодействия с 32-битными библиотеками. В этом случае операционная система Windows позволяет создать специальную обертку с помощью «Службы компонентов» (COM+), которая выступает в роли посредника.
Проанализируем процесс создания такого приложения на сервере:
Win + R, введите команду dcomcnfg и нажмите Enter. Откроется окно «Служба компонентов».V83_COMConnector) и выберите способ активации: «Серверное приложение» (Server application). Это критически важно, так как именно этот режим заставит библиотеку выполняться в отдельном процессе dllhost.exe, решая проблему разрядности.USR1CV8), или выберите системную учетную запись с правами администратора.V83_COMConnector, найдите ветку Компоненты.comcntr.dll в папке установленной платформы 1С.Данный метод гарантирует стабильную работу COM-соединения вне зависимости от архитектурных нестыковок вашей инфраструктуры.