При организации интеграции между информационными базами 1С через внешнее COM-соединение разработчики нередко сталкиваются с двумя распространенными проблемами: путаницей в экранировании кавычек при динамической сборке строки подключения и ошибкой несоответствия версий comcntr.dll и core83.dll. Разберем обе ситуации подробно и рассмотрим надежные способы их решения.
При конкатенации строк вручную легко допустить синтаксическую ошибку из-за необходимости многократного дублирования символов кавычек. Проанализируем стандартную структуру параметров для подключения к серверной информационной базе. В готовой строке значения параметров Ref, Usr и Pwd (а при необходимости и Srvr) должны быть заключены в двойные кавычки.
Посмотрим на эталонный пример рабочей строки:
"Srvr=DB:1341;Ref=""R2015"";Usr=""Юлия"";Pwd=""809"";"
Чтобы избежать ошибок при склейке переменных через оператор +, используем встроенную функцию платформы СтрШаблон. Это делает код читаемым и исключает путаницу со служебными кавычками:
СтрокаПодключения = СтрШаблон("Srvr=""%1"";Ref=""%2"";Usr=""%3"";Pwd=""%4"";", Сервер1С, ИмяБазы, Пользователь, Пароль);
COMСоединитель = Новый COMОбъект("V83.COMConnector");
БазаПодключение = COMСоединитель.Connect(СтрокаПодключения);
Если требуется подключение к файловой информационной базе, сформируем строку по аналогичному принципу с параметром File:
СтрокаПодключения = СтрШаблон("File=""%1"";Usr=""%2"";Pwd=""%3"";", КаталогБазы, Пользователь, Пароль);
COMСоединитель = Новый COMОбъект("V83.COMConnector");
БазаПодключение = COMСоединитель.Connect(СтрокаПодключения);
Если строка подключения собрана корректно, но при вызове метода Connect возникает исключение вида «Версия компоненты 'comcntr' (8.3.X.X) отличается от версии корневого модуля 'core83' (8.3.Y.Y)», выясним причину сбоя. Эта ошибка указывает на конфликт версий платформы в операционной системе Windows:
comcntr.dll от одного релиза платформы, а вызывающий процесс (клиент или сервер 1С) работает на другом релизе и загружает свои библиотеки ядра core83.dll.Разберем по шагам, как зарегистрировать библиотеку нужной версии с помощью системной утилиты regsvr32:
cmd.exe) от имени администратора.
regsvr32 /u "C:\Program Files\1cv8\8.3.6.2152\bin\comcntr.dll"
Для 64-разрядной версии платформы:
regsvr32 "C:\Program Files\1cv8\8.3.8.2027\bin\comcntr.dll"
Для 32-разрядной версии платформы:
regsvr32 "C:\Program Files (x86)\1cv8\8.3.8.2027\bin\comcntr.dll"
Если на сервере параллельно используются разные версии платформы 1С или требуется обращение 32-битного клиента к 64-битному серверу, перерегистрация в реестре может нарушить работу других процессов. В этом случае изолируем COM-соединитель через Службы компонентов Windows:
dcomcnfg.exe через Win + R).1Cv83_COMConnector) и выберем тип активации: «Серверное приложение» (Server application).dllhost.exe.comcntr.dll из каталога bin требуемой версии платформы.Проанализируем современные альтернативы COM-подключению, которые избавят архитектуру от привязки к операционной системе Windows и конфликтов библиотек: