Типичная ситуация: после планового обновления или переустановки сервера 1С:Предприятие (например, на релиз 8.3.12.1685) ломается привычный автоматический обмен данными между базами (например, между «Зарплата и управление персоналом» и «Бухгалтерия предприятия»). При попытке запустить синхронизацию система выдает лаконичное, но крайне неприятное сообщение: «Ошибка COM-соединения».
При этом администратор уже выполнил базовые действия: библиотека comcntr.dll успешно зарегистрирована в операционной системе через утилиту regsvr32, на сервере установлена только одна версия платформы 1С, а сама архитектура операционной системы, сервера 1С и платформы является полностью 64-разрядной. Казалось бы, конфликта разрядностей быть не должно. Однако обмен все равно отказывается работать.
В этой статье мы подробно разберем по шагам, почему возникает эта проблема и как настроить операционную систему Windows и сервер 1С для восстановления корректной работы COM-соединения.
Для начала проанализируем ситуацию с архитектурной точки зрения. Ошибка COM-соединения в среде 64-битных систем чаще всего кроется в одной из следующих причин:
rphost, запущенный от имени системной учетной записи (обычно это usr1cv8). По умолчанию у этого пользователя отсутствуют права на запуск и активацию локальных COM-объектов в системе.Рассмотрим подробнее каждое из решений, которые помогут вам полностью победить эту проблему.
Это самый надежный способ решить проблему разрядности. Мы заставим Windows запускать библиотеку comcntr.dll в изолированном системном хост-процессе dllhost.exe, который будет выступать «мостом» между процессами разной разрядности.
Выполним настройку по шагам:
dcomcnfg и нажмите Enter.V83_COMConnector) и обязательно выберите способ активации: Серверное приложение (Server Application). Нажмите Далее.V83_COMConnector, найдите в ней папку Компоненты. Нажмите на нее правой кнопкой мыши и выберите Создать -> Компонент.C:\Program Files\1cv8\8.3.12.1685\bin\comcntr.dll. Завершите добавление.После проведения этих манипуляций Windows сможет корректно транслировать вызовы к 1С независимо от того, какой разрядности процесс пытается инициировать соединение.
Если обмен запускается по расписанию на сервере, нам необходимо предоставить службе 1С права на использование созданного нами COM-объекта.
Проанализируем шаги по настройке прав безопасности:
dcomcnfg нажмите правой кнопкой мыши на наше созданное приложение V83_COMConnector и откройте его Свойства.usr1cv8 на локальный запуск и локальную активацию.Если в системе ранее было установлено несколько версий платформы 1С, реестр Windows может хранить старые ключи классов V83.COMConnector, которые перенаправляют вызовы по некорректным путям.
Для исправления ситуации выполним полную перерегистрацию. Запустите командную строку (CMD) обязательно от имени Администратора и выполните следующие команды по очереди:
rem Сначала принудительно отменяем регистрацию библиотеки для старого и нового релизов
regsvr32 /u "C:\Program Files\1cv8\8.3.12.1685\bin\comcntr.dll"
rem Заново регистрируем целевую библиотеку актуальной версии платформы
regsvr32 "C:\Program Files\1cv8\8.3.12.1685\bin\comcntr.dll"
После этого рекомендуется проверить реестр Windows. Нажмите Win + R, введите regedit. Перейдите по пути HKEY_CLASSES_ROOT\CLSID\ и найдите уникальный идентификатор (GUID) компоненты 1С. Убедитесь, что параметр InprocServer32 указывает на корректный физический путь к файлу в папке 8.3.12.1685\bin.
Начиная с версии платформы 8.3.11, фирма 1С повысила требования к операционной системе. Библиотека comcntr.dll не сможет инициализироваться, если в ОС отсутствуют современные библиотеки среды выполнения.
Выясним, какие компоненты необходимо установить на сервер:
KB2999226. Без него запуск библиотеки будет блокироваться на уровне ядра Windows с ошибкой отсутствия зависимостей.В некоторых случаях при быстром или автоматическом обновлении платформы системные администраторы забывают указать установку COM-компонентов. По умолчанию при выборочной установке данный флаг может быть снят.
Чтобы проверить это:
После проведения установки обязательно повторите регистрацию библиотеки в командной строке, как это было описано в Решении 3.
Для того чтобы убедиться, что COM-соединение теперь функционирует нормально, мы можем запустить внешнюю обработку или выполнить простой скрипт на встроенном языке 1С. Посмотрим на пример кода, который инициализирует соединение:
Попытка
Комнектор = Новый COMОбъект("V83.COMConnector");
ПараметрыПодключения = "Srvr=""ИмяСервера"";Ref=""ИмяБазы"";Usr=""Администратор"";Pwd=""Пароль"";";
Соединение = Комнектор.Connect(ПараметрыПодключения);
Сообщить("Успешное подключение! Версия платформы: " + Соединение.Metadata.Version);
Исключение
Сообщить("Ошибка инициализации COM-объекта: " + ОписаниеОшибки());
КонецПопытки;
Если код возвращает сообщение об успешном подключении и выводит версию платформы, значит, все настройки выполнены верно, права безопасности настроены корректно, а системные компоненты Windows находятся в актуальном состоянии.