При интеграции различных информационных систем на базе 1С часто возникает необходимость установить COM-соединение между базами, работающими на разных версиях платформы (например, обмен между 8.3.10 и 8.3.14). Основная проблема заключается в том, что стандартная регистрация библиотеки comcntr.dll через regsvr32 позволяет «видеть» в системе только одну версию компонента — ту, которая была зарегистрирована последней. Попытка добавить вторую библиотеку в «Службы компонентов» (COM+) часто наталкивается на ошибку "Этот объект уже зарегистрирован". В данной статье мы разберем, как обойти это ограничение и правильно настроить среду для работы с несколькими версиями платформы одновременно.
Проанализируем причину возникновения этой ошибки. Каждая библиотека comcntr.dll, независимо от версии платформы 1С, имеет один и тот же уникальный идентификатор класса (CLSID). Когда мы пытаемся создать новое приложение в «Службах компонентов» и добавить туда компонент из папки другой версии платформы, операционная система Windows обращается к реестру. Видя, что компонент с таким идентификатором уже прописан в системе (или уже добавлен в другое COM+ приложение), она блокирует создание дубликата.
Чтобы решить эту задачу, нам необходимо использовать механизм изоляции компонентов. Рассмотрим по шагам, как правильно подготовить систему.
Прежде чем приступать к созданию «оберток» в COM+, рекомендуется корректно разрегистрировать имеющиеся библиотеки, чтобы избежать конфликтов. Для этого воспользуемся утилитой regsvr32. Важно помнить о разрядности вашей системы и используемой платформы 1С.
Для 64-битной библиотеки выполните в командной строке (от имени администратора):
regsvr32 /u "C:\Program Files\1cv8\8.3.10.2466\bin\comcntr.dll"
regsvr32 /u "C:\Program Files\1cv8\8.3.14.1779\bin\comcntr.dll"
Если вы используете 32-битную версию платформы на 64-битной Windows, необходимо использовать версию regsvr32, расположенную в папке C:\Windows\SysWOW64\.
Для того чтобы система могла одновременно работать с разными версиями comcntr.dll, мы создадим для каждой версии отдельное «Серверное приложение» в консоли «Службы компонентов» (Component Services). Это позволит запускать библиотеку в изолированном процессе dllhost.exe.
1C_COM_8_3_10.comcntr.dll нужной версии.Если на этом этапе вы снова видите ошибку "Этот объект уже зарегистрирован", попробуйте сначала импортировать компонент, который уже зарегистрирован в системе, а затем в его свойствах изменить путь к файлу. Однако более надежным способом является временное переименование веток реестра или использование экспорта/импорта MSI-пакетов COM+, где в конфигурационном файле вручную меняются ссылки на файлы.
После того как мы создали обертки в COM+, нам нужно иметь возможность обращаться к ним из кода 1С. По умолчанию Новый COMОбъект("V83.COMConnector") будет обращаться к той версии, которая зарегистрирована в реестре как основная. Чтобы обращаться к конкретной версии, разберем программный способ.
Для каждой созданной «обертки» в реестре Windows можно создать уникальный ProgID. Например, V83.COMConnector.8.3.10. Это делается путем редактирования ветки HKEY_CLASSES_ROOT, где создается новый ключ, ссылающийся на CLSID нашей обертки. Тогда в коде мы сможем писать:
// Пример обращения к конкретной версии платформы
НомерВерсии = "8.3.10.2466";
Попытка
Соединитель = Новый COMОбъект("V83.COMConnector_" + СтрЗаменить(НомерВерсии, ".", "_"));
Исключение
Соединитель = Новый COMОбъект("V83.COMConnector"); // Откат на стандартный метод
КонецПопытки;
Выясним важную причину, почему иногда разработчики сталкиваются с ошибками вида "Метод объекта не обнаружен (СтрокаСоединенияИнформационнойБазы)". Существует два принципиально разных способа создания COM-соединения:
1. COM-соединение (V83.COMConnector):
comcntr.dll.СтрокаСоединенияИнформационнойБазы() в нем может быть недоступен напрямую у объекта соединения.2. OLE-соединение (V83.Application):
1cv8.exe.Если вам требуется функционал, который есть только в Application, но нет в COMConnector, вам придется использовать именно его, однако управление версиями для V83.Application осуществляется через системные настройки ассоциаций файлов 1С и реестр.
Проанализируем ситуацию, когда соединение не устанавливается из-за прав. При использовании COM+ процесс запускается от имени указанного вами пользователя. Убедитесь, что:
bin соответствующей версии платформы 1С.Рассмотренный метод использования COM+ является наиболее стабильным и «чистым» способом поддержки многоверсионности на одном сервере. Он избавляет от необходимости постоянно использовать regsvr32 при переключении между задачами обмена данными.