Проанализируем ситуацию, с которой часто сталкиваются разработчики и системные администраторы при попытке настроить обмен данными между базами 1С. При выполнении кода, инициирующего COM-соединение, система выдает ошибку: Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Несоответствие версий клиента и сервера 1С:Предприятия Различаются версии клиента и сервера. Рассмотрим подробнее, почему возникает эта проблема и как ее правильно решить.
Суть проблемы кроется в системном реестре операционной системы Windows. Компонента COM-соединения, а именно библиотека comcntr.dll, жестко привязана к конкретной версии установленной платформы 1С:Предприятие. При обновлении технологической платформы на сервере или клиентских машинах записи в реестре Windows часто не обновляются автоматически.
Это может произойти из-за нехватки прав доступа у пользователя, выполняющего обновление, или из-за особенностей самого инсталлятора. В результате клиентское приложение 1С пытается вызвать COM-объект, но операционная система "подсовывает" ему библиотеку от старой, уже удаленной или просто другой установленной версии платформы. Возникает конфликт версий, и соединение обрывается с ошибкой.
Разберем по шагам действия, которые необходимо выполнить на стороне сервера. Зачастую администраторы забывают важный нюанс при установке платформы. При установке сервера 1С:Предприятия через стандартный инсталлятор необходимо вручную отмечать компонент «COM-соединение».
Если при обновлении сервера вы пропустите этот пункт, библиотека comcntr.dll нужной версии просто физически не появится в каталоге установки (каталоге bin). Как следствие — зарегистрировать ее будет невозможно, так как файла не существует. Поэтому первым делом проверим наличие файла нужной версии платформы на сервере (например, 8.3.22.1923), и если его нет, запустим инсталлятор платформы в режиме изменения и доустановим необходимую компоненту.
Перейдем к самой частой проблеме — отсутствию правильной регистрации DLL-компоненты. Посмотрим на пример того, как система ищет библиотеку: ей важна точная версия, а также разрядность (32-bit или 64-bit). Пути для регистрации библиотек отличаются в зависимости от архитектуры платформы 1С.
Для успешной регистрации необходимо использовать системную утилиту regsvr32. Обратите внимание: командную строку (cmd) необходимо запускать исключительно от имени Администратора. Если запустить ее в обычном режиме, команда может отработать визуально без ошибок, но в системный реестр изменения внесены не будут, и проблема не решится.
Рассмотрим команды для регистрации:
regsvr32 "C:\Program Files (x86)\1cv8\8.3.22.1923\bin\comcntr.dll"
regsvr32 "C:\Program Files\1cv8\8.3.22.1923\bin\comcntr.dll"
Укажите свой актуальный номер версии платформы вместо 8.3.22.1923.
Многие забывают про этот критически важный этап. Проанализируем, почему после успешной регистрации библиотеки ошибка может сохраняться. Дело в том, что процессы, которые уже загрузили старую версию библиотеки в оперативную память, не узнают об изменениях в реестре до их перезапуска.
После перерегистрации DLL-файла недостаточно просто закрыть и заново открыть конфигуратор или режим Предприятия. Необходимо сделать следующее:
Разберем более сложный сценарий. Иногда возникает ситуация, когда на одном физическом сервере должны параллельно работать информационные базы с разными версиями платформы 1С, и им обеим требуются COM-соединения. Простой регистрацией через regsvr32 эту проблему не решить, так как в реестре Windows будет активна только одна — последняя зарегистрированная версия компоненты.
В таких случаях системные администраторы используют стандартную системную оснастку Windows — «Службы компонентов» (Component Services) или выполняют запросы через COM-подключение. В ней вручную создаются отдельные COM+ приложения для каждой версии DLL-библиотеки. Этим приложениям присваиваются уникальные псевдонимы (например, V83.COMConnector.8.3.20 и V83.COMConnector.8.3.22). Благодаря этому каждая база 1С сможет вызывать именно ту версию COM-объекта, которая соответствует ее платформе, полностью исключая конфликт версий.
Подводя итог, давайте посмотрим на архитектурную целесообразность использования COM-соединения сегодня. В современной экосистеме 1С COM-соединение считается устаревшей и проблемной технологией именно из-за мучительной поддержки зоопарка версий при каждом обновлении платформы (а платформы 1С обновляются часто).
Разработчики фирмы "1С" настоятельно рекомендуют уходить от COM-технологий. В качестве современных и отказоустойчивых альтернатив для обмена данными между базами рассмотрим следующие варианты (удобно через модуль синхронизации баз по формату EnterpriseData):
Используя современные методы интеграции (например, HTTP-сервисы), вы навсегда избавитесь от ошибок вида "Несоответствие версий клиента и сервера" и обеспечите стабильную работу обмена данными независимо от обновлений платформы — для решения этой задачи есть надежный обмен данными на основе EnterpriseData.